我正在编写一个应该创建一些快捷方式的简单应用程序。
为此,我使用Interop.IWshRuntimeLibrary
作为嵌入式资源添加。
在类init上我调用
Assembly.Load(Resources.Interop_IWshRuntimeLibrary);
我也尝试过:
AppDomain.CurrentDomain.Load(Resources.Interop_IWshRuntimeLibrary);
当我在VisualStudio输出窗口中构建应用程序时,我看到程序集已加载:
已加载“Interop.IWshRuntimeLibrary”。
但是,当我尝试使用该程序集中的对象时,它给了我这个例外:
“无法加载文件或程序集”Interop.IWshRuntimeLibrary, Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null“。
答案 0 :(得分:4)
它并不像您想象的那么简单,如果Visualstudio说加载了引用,则意味着在构建期间加载了项目的引用。它与你要实现的目标无关。
最简单的方法是绑定到程序集解析失败时调用的AppDomain.AssemblyResolve Event:
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolveEventHandler);
然后:
private Assembly MyResolveEventHandler(object sender,ResolveEventArgs args)
{
Assembly rtn=null;
//Check for the assembly names that have raised the "AssemblyResolve" event.
if(args.Name=="YOUR RESOURCE ASSEMBLY NAME")
{
//load from resource
Stream resxStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("YOUR RESOURCE ASSEMBLY NAME");
byte[] buffer = new byte[resxStream.Length];
resxStream.Read(buffer, 0, resxStream.Length);
rtn = Assembly.Load(buffer);
}
return rtn;
}