2

2つのモジュールで構成される.NETアセンブリを作成する必要があります。1つはネイティブコードを含む内部(DLL内)、もう1つは外部(.netmoduleファイル内)です。

ネイティブ部分を除いて、これは簡単に実行できます。

C#のコンパイラはこれを行うことができます(これは私が望むものですが、ネイティブコードを使用します):

csc /t:library /out:foobar.dll foo.cs /out:bar.netmodule bar.cs
-foobar.dll (contains assembly manifest and foo's IL)
    -internal module foobar.dll (contains foo's IL)
    -external module bar.netmodule (contains bar's IL)

C ++コンパイラ/リンカは、すべてを1つの内部モジュールに入れます。

cl /clr /LD foo.cpp /link bar.netmodule /LTCG
OR link /out:foobar.dll foo.netmodule bar.netmodule
-foo(bar).dll (contains IL for both foo and bar, as well as assembly manifest)

Assembly Linkerは、外部モジュールのみを実行します。

al /out:foobar.dll foo.netmodule bar.netmodule
-foobar.dll (only contains manifest)
    -external module foo.netmodule (contains foo's IL)
    -external module bar.netmodule (contains bar's IL)

ILを手動で調整しようとしましたが、ILDASMとILASMはネイティブコードをラウンドトリップできないようです。

ildasm foobar.dll /out=foobar.il
ilasm /dll foobar.il
-lots of errors

明確にするために、私が欲しいのはこれです:

-foobar.dll (contains assembly manifest and foo's IL AND NATIVE CODE)
    -internal module foobar.dll (contains foo's IL AND NATIVE CODE)
    -external module bar.netmodule (contains bar's IL)
4

3 に答える 3

3

ヘンクはすでに正しい軌道に乗っています。.netmoduleアセンブリを作成するための入力用のみを作成できます。アセンブリは、.NET 環境における最小の実行単位です。アセンブリは、1 つ以上の物理ファイルで構成できます。リソース ファイル、ネットモジュール、ネイティブ DLL など、複数のリソースを含めることができます。ネットモジュールは単独で展開することはできません。アセンブリにリンクする必要があります。

邪魔にならないようになったので、あなたが求めていることに集中してみましょう. マルチファイル アセンブリを作成しようとしていますか? それは可能です。これは、マルチモジュール アセンブリに関するかなり古いですが、まだ有用な投稿です。それとも、ライブラリとして使用できるネットモジュールを作成しようとしていますか? ネットモジュールにはアセンブリが含まれていないため、それは不可能です。

これで質問に答えられない場合は、最終結果をどうしたいか、および/またはそれがどのように使用されることを期待しているかについて、もう少し詳しく説明していただけますか?

于 2009-10-26T00:46:56.173 に答える
2

この問題はSystem.Data.Sqliteで解決されているようです。ファイルSQLite.Interop/SQLite.Interop.2010.vcxprojを参照してください。

要素では<Link/>、モジュール内の netmodules を指定する必要があり<AdditionalDependencies/>ます。

于 2012-12-21T23:18:11.993 に答える
1

免責事項:これはテストされていません。

正しいclコンパイラオプションをお探しですか?

cl /clr:pure /LN Stringer.cpp
cl /clr:pure Client.cpp /link /ASSEMBLYMODULE:Stringer.netmodule

Abelが提供するリンクのlink.exeツールが機能しなかったことに驚いています。

于 2010-07-31T19:56:51.920 に答える