背景:私は、約12の異なるサブアプリケーションを含む非常に大きなスイートに取り組んでいます。私の目標は、これらのサブアプリケーションのいずれかを使用し、すべてのDLLをEXEファイルに埋め込んだ独自の実行可能ファイルを作成することです。これまでのところ、ほとんどのDLLを次の手順で埋め込むことができました。mscorlib.dllでSystem.IO.FileNotFoundExceptionが発生していますか?
1)DLLをローカルフォルダのプロジェクトに追加し、埋め込みリソースに設定します。
2)
を提出するには、[参照]タブにそれらのDLLを追加して、偽
3にローカルコピープロパティを設定)Resources.resxにそれらのDLLを追加します。私は新しいのProgram.csファイルをも作成しましたエントリポイントを目的のサブアプリケーションアセンブリにあるメイン関数に設定します。私の問題は、System.AppDomain.ExecuteAssemblyで設定されたスタックフレームでmscorlib.dllにSystem.IO.FileNotFoundExceptionを取得し続けるため、スイート全体を実行するために使用されるDLLファイルをサブアプリケーションのEXEに埋め込むことができないことです。しかし、私は完全にこの例外を避けることができますが、私は "Suite.dll"ローカルコピープロパティをtrueに設定しています。
ここに私のアセンブリリゾルバハンドラがありますが、Main関数が実行される前でも例外がマネージコードで発生しているため、決してヒットしません。
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
string resourceName = new AssemblyName(args.Name).Name+".dll";
string resource = Array.Find(this.GetType().Assembly.GetManifestResourceNames(), element => element.EndsWith(resourceName));
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
これも防止できますか?この依存関係を解決して、Suite DLLファイルをサブアプリケーションEXEに埋め込む方法を教えてください。さらに情報が必要な場合はコメントしてください。質問を編集します。ありがとう!
例を挙げることはできますか?私はあなたのポイントを参照してくださいだと思うが、Main()関数は、例外が発生する前に(関数の先頭にブレークポイントを配置することによって検証される)呼び出されないため、動作する方法が混乱しています。 – LaneL
ブレークポイントは何も確認しません。アセンブリバインディング以外のすべてをコメントアウトすると、魔法のように到達します。 – Joshua
感謝ジョシュア、私はそれを感謝します。 – LaneL