我正在开发一个Windows 7小工具。我正在创建一个activex对象并加载程序集。我正在关注codeproject(GadgetInterop)中提到的methodlogy。该小工具的任务之一是与Facebook接口。
这就是我引用的方式: Javascript创建一个GadgetBuilder对象。 从这里我加载我的库。说“MyLibrary.dll”。
如果我从ASP.NET表单测试我的代码,它可以很好地工作。但是,当我通过尝试使用javascript加载它从我的html页面运行它时,我收到以下错误:
无法加载文件或程序集'facebook,Version = 2.1.3654.38113,Culture = neutral,PublicKeyToken = null'或其依赖项之一。系统找不到指定的文件。
我确认dll与“MyLibrary.dll”位于同一文件夹中。
答案 0 :(得分:1)
您不必在桌面小工具中使用基于反射的程序集加载器来编写.net代码,您可以使用类ID等编写程序集以使其可见。This article提供了一个使用示例.net在没有“适配器”的情况下实现你想要做的事情。
话虽如此,基于activex的桌面小工具存在各种问题,您应该注意:
因此,尽管你可以在没有反射的情况下做到这一点,但使用反射可能是更好的选择,因为您可以将适配器组件复制到备用文件夹,使用它来加载当前程序集,然后在小工具关闭或完成时卸载它使用它。这消除了第一个无法卸载小工具的问题,因为主机程序集位于不同的文件夹中,并且无论如何在小工具关闭时卸载反射的程序集。
facebook.dll未加载的原因是因为您使用的加载程序无法正确解析依赖项(它无法找到该文件,因为它不知道在哪里查找)。欢迎您尝试使用名为PluginLoader的基于反射的程序集加载器,看看是否有效。我们还没有正式发布它,但我们打算让它广泛使用,并建议所有开发人员使用它来尝试消除ActiveX和Windows桌面小工具的问题。因为我们还没有正式发布它,所以你必须安装我们的小工具Auction Sidebar Tool,它将安装插件加载器,可以使用以下代码:
var plLoader = new ActiveXObject("Sidebar.PluginLoader");
var myLibrary = plLoader.LoadAssembly(classToLoad,
System.Gadget.path+"\\path\\to\\MyLibrary.dll");
myLibrary.GetFaceBookFeeds();
要加载的类是需要以Namespace.Class格式加载的类(即 MyLibrary.MyClass )。我们专门编写它来正确解析任何依赖关系,所以它应该适合你。如果它适合您,欢迎您将其与您的小工具一起使用。您只需要AuctionSidebarTool文件夹中的PluginLoader.js和PluginLoader.dll文件,但您需要编辑PluginLoader.js文件以删除引用我们程序集的部分(第110行)。如果在项目中包含它,它将检查现有的PluginLoader.dll,如果它失败,它将把它复制到本地AppData中的Windows Sidebar文件夹,注册它并为AddInLoader
对象提供方法{ {1}}和LoadAssembly
。如果您需要任何额外的帮助,请在评论中告诉我。
希望有所帮助。这可能是我迄今为止写的最长的答案:)