因此,我试图在 C# .NET 2.0 中的可移植应用程序中保留所有依赖项(包括非托管 - 所以没有 ILMerge)。
起初,我通过使用成功地将 DLL 写入磁盘,File.WriteAllBytes("DLLName.dll", Propertes.Resources.dll_name)
以便程序可以从中读取,但问题是写入它们所花费的时间以及它造成的混乱。
相反,我注意到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 上的 catch 块,但我认为你写的这么好心的答案会用一块石头击中两只鸟。
但是,这是我在程序进入主应用程序时尝试/捕获后从我的计算机得到的错误:
“无法加载文件或程序集 'OpenHardwareMonitorLib, Version=0.4.0.0, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。系统找不到指定的文件。”
但当然,它仍在寻找实际的 DLL 文件。现在,我该如何解决这个问题?
额外细节
OpenHardwareMonitorLib 没有外部依赖项。我还更新了这个问题,以明确在try/catch 块之后它无法在我的计算机上运行,也不是我朋友的计算机在所示的 try/catch 块中失败。