我希望将CLR程序集作为嵌入式资源存储在我的C#应用程序中,并在运行时加载。 我将dll作为嵌入式资源包含在内,并尝试在运行时检索数据字节并按如下方式加载程序集
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyNamespace.MyCLRAssembly.dll"))
{
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
然而,这失败,报告
Attempt to load an unverifiable executable with fixups (IAT with more than 2 sections or a TLS section.) (Exception from HRESULT: 0x80131019)
为防止出现此错误,需要使用/ CLR:Pure开关编译CLR dll,但这是不可能的,因为CLR dll包含非托管代码。
因此,我尝试了另一种解决方案来解压缩程序集并将其复制到用户AppData路径中的临时文件夹,然后相应地设置PATH变量。当应用程序尝试访问CLR程序集时,此失败的报告文件未找到异常。我可以复制到C#应用程序的安装路径,这样运行正常但不在远程文件夹中。
作为测试,我将CLR dll复制到PATH变量中的文件夹,但是失败了。有人能告诉我我做错了什么吗?该问题是否与程序集类型的差异有关,即C#程序集加载具有托管和非托管C ++的程序集。
感谢。