そのため、C# .NET 2.0 のポータブル アプリケーション内にすべての依存関係 (管理されていないものを含む - ILMerge がない) を保持しようとしています。
最初は を使用して DLL をディスクに書き込むことに成功しFile.WriteAllBytes("DLLName.dll", Propertes.Resources.dll_name)
、プログラムが DLL から読み取れるようにしましたが、書き込みに時間がかかり、混乱が生じることが問題でした。
代わりに、私は気づいたAssembly.Load
。これは、リソースからプログラムに依存関係を読み取るために使用したコードです。
try
{
// Load OpenHardwareMonitorLib
Assembly.Load(Properties.Resources.lib_hardware_monitor);
// Some computers explicitly require 32 or 64 bit versions of SQLite. Load either version depending on architecture.
if (Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE") == "AMD64")
{
// 64 bit version
Assembly.Load(Properties.Resources.lib_sqlite_x64);
}
else
{
// 32 bit version
Assembly.Load(Properties.Resources.lib_sqlite_x86);
}
}
catch ...
そして、それはうまくいくようです。まあ、少なくとも私のコンピュータでは。友達のPCのキャッチブロックに入ってしまいましたが、あなたが親切に書いてくれる回答は一石二鳥だと思います。
ただし、これは、プログラムがメイン アプリケーションに入ったときに、try/catch の後にコンピューターから取得したエラーです。
「ファイルまたはアセンブリ 'OpenHardwareMonitorLib、Version=0.4.0.0、Culture=neutral、PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。指定されたファイルが見つかりません。」
もちろん、実際の DLL ファイルを探しています。さて、どうすればこれを修正できますか?
追加の詳細
OpenHardwareMonitorLib には外部依存関係はありません。また、質問を更新して、try/catch ブロックの後に自分のコンピューターでも、表示された try/catch ブロックで失敗した友人のコンピューターでも機能しないという事実を明確にしました。