2

VMで実行されているUbuntu Desktop 12.04のmono 2.10.8.1で正常にコンパイルしている約10個のプロジェクトを含む.NET 4.0ソリューションがあります。

mkbundle を実行して、10 個の DLL すべてを 1 つの DLL に結合し、それを他のソリューションで参照できるようにしようとしています (つまり、高レベルのアプリケーションで頻繁に再利用されるいくつかのコア ライブラリ)。

これは、ソリューションを構築するために実行しているものです。

xbuild /nologo CoreApp.sln

次に、以下を実行して DLL を結合します。

mkbundle -c --nomain -o Build/CoreApp.dll Build/FirstLibrary.dll Build/SecondLibrary.dll Build/ThirdLibrary.dll

これは正常に完了し、CoreApp.dll を取得します。

ただし、依存ソリューションをビルドしようとすると、次の例外が発生します。

Error CS0009: Metadata file `/home/user/project/Build/CoreApp.dll' does not contain valid metadata (CS0009) (HigherLevelApp.Impl)

必要に応じて、さらに情報を提供していただければ幸いです。

4

2 に答える 2

2

mkbundle は、複数のライブラリを 1 つにマージするのではなく、スタンドアロンのバイナリを作成するためのものです。

il-merge のようなものが必要です。

于 2012-06-19T23:21:54.670 に答える
2

mkbundleILの合併ではありません。ツールの出力は、自己完結型のアプリケーションです (mono 自体の有無にかかわらず)。そのため、他の .NET プロジェクトでは使用できなくなりました。

単一の .NET アプリケーションを実行するために必要なmkbundleすべてを含む単一のファイルを配布できます。

あなたが探しているのは、いくつかのアセンブリを新しいアセンブリにマージする方法です。Microsoft にはそのようなツールがあり、他のいくつかの製品 (多くは Mono.Cecil に基づいています) が同様のことを行います。

于 2012-06-19T23:23:12.920 に答える