C# 在运行时加载混合程序集
我有一个项目使用Sqlite(C# 在运行时加载混合程序集,c#,.net,sqlite,C#,.net,Sqlite,我有一个项目使用Sqlite(System.Data.Sqlite.DLL)它是混合汇编。我需要在运行时加载它。正如我所知,使用AssemblyResolve事件是不可能的。所以目标是将程序集解包到Temp目录,并向应用程序显示在哪里可以找到它。 代码是: public static void SaveSqlite() { byte[] sqliteAsm = EmbedAssembly.System_Data_SQLite; string tempFile = Path.Get
System.Data.Sqlite.DLL
)它是混合汇编。我需要在运行时加载它。正如我所知,使用AssemblyResolve
事件是不可能的。所以目标是将程序集解包到Temp目录,并向应用程序显示在哪里可以找到它。
代码是:
public static void SaveSqlite()
{
byte[] sqliteAsm = EmbedAssembly.System_Data_SQLite;
string tempFile = Path.GetTempPath();
File.WriteAllBytes(tempFile + "System.Data.SQLite.DLL", sqliteAsm);
}
// and the setup int start method
SaveSqlite();
AppDomain.CurrentDomain.SetupInformation.PrivateBinPath = Path.GetTempPath();
所以它不起作用。应用程序找不到sqlite程序集,但它已成功保存到Temp dir。如何解决这个问题?谢谢。解决方案已经建立
SetDllDirectory
WinAPI设置dll搜索目录[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetDllDirectory(string lpPathName);
//...
string text4 = Path.Combine(text, "SQLite.Interop.dll");
if (!File.Exists(text4))
{
byte[] array3 = LoadCompressedDllFromResource("nativedll.SQLite.Interop.z");
array3 = DecompressBytes(array3);
SaveToFile(array3, text4);
}
//...
使用libz应用程序打包所有托管程序集什么不起作用?是否存在异常?专用bin路径必须位于应用程序的基本目录下,否则将忽略它。此外,在创建应用程序域后,您不能修改
AppDomainSetup
数据。仅在创建新应用程序域时读取数据。如果在创建后对其进行修改,则忽略这些更改。是。应用程序表示找不到assembly System.Data.SQLite.DLLmike z。好啊但是否有可能通过某种方式从临时加载组件?