C# 从资源加载的程序集无法加载文件或程序集

C# 从资源加载的程序集无法加载文件或程序集,c#,.net,reflection,.net-assembly,embedded-resource,C#,.net,Reflection,.net Assembly,Embedded Resource,我正在编写一个简单的应用程序,应该可以创建一些快捷方式。 为此,我使用作为嵌入式资源添加的Interop.iwshurantimelibrary 在类初始化时,我调用 Assembly.Load(Resources.Interop_IWshRuntimeLibrary); 我还尝试: AppDomain.CurrentDomain.Load(Resources.Interop_IWshRuntimeLibrary); 在VisualStudio输出窗口中构建应用程序时,我看到已加载程序集:

我正在编写一个简单的应用程序,应该可以创建一些快捷方式。 为此,我使用作为嵌入式资源添加的
Interop.iwshurantimelibrary

在类初始化时,我调用

Assembly.Load(Resources.Interop_IWshRuntimeLibrary);
我还尝试:

AppDomain.CurrentDomain.Load(Resources.Interop_IWshRuntimeLibrary);
在VisualStudio输出窗口中构建应用程序时,我看到已加载程序集:

已加载“Interop.iwshurantimelibrary”

但是,当我尝试使用该程序集中的对象时,会出现以下异常:

“无法加载文件或程序集”Interop.iwruntimelibrary, 版本=1.0.0.0,区域性=中性,PublicKeyToken=空”


这并不像您想象的那么简单,如果Visualstudio说已加载引用,则意味着在构建过程中加载了项目的引用。这与您想要实现的目标无关

最简单的方法是绑定到在程序集解析失败时调用的:

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
然后:


这并不像您想象的那么简单,如果Visualstudio说已加载引用,则意味着在构建过程中加载了项目的引用。这与您想要实现的目标无关

最简单的方法是绑定到在程序集解析失败时调用的:

AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
然后:


这是正常的,Assembly.Load(byte[])是一种非常糟糕的加载程序集的方法,它没有加载上下文。这在很久以前就被修复了。对于互操作程序集,只需设置“嵌入互操作类型”“在程序集引用上设置为true。您不再需要部署程序集。COM组件中也没有任何东西是在.NET中无法完成的。这很正常,Assembly.Load(字节[])是一种非常糟糕的加载程序集的方法,它没有加载上下文。对于互操作程序集,这在很久以前就已修复,只需在程序集引用中将“嵌入互操作类型”设置为true即可。您不再需要部署程序集。COM组件中也没有任何东西是在.NET中做不到的。@Andrey:D很乐意帮忙@安德烈:我很乐意帮忙!