2

我正在尝试构建一个.NET 客户端软件包,可以按需下载其组件。

假设我有一个程序被拆分为一个主可执行文件和 20 个其他 dll 文件。主程序引用了其中的 3 个,它们引用了其他一些,无论如何......它们有某种树状依赖结构。

我要实现的目标是仅分发主要可执行文件并按需从服务器位置获取其他所有内容。

像这样:主程序和所有这些 dll 项目都在一个解决方案中,并且像任何其他解决方案一样构建在一起。分发时,仅分发exe,其他dll(包括使用的一些第三方库)放在可供下载的服务器位置。

exe运行,显示一些UI,当用户单击菜单项时,将显示来自dll文件的另一个UI窗口,因此操作系统会查找dll(不存在),我进行干预,从下载所需的dll服务器,把它放在exe旁边,让操作系统加载它,就好像它从一开始就在那里一样。

这看起来可以通过使用通用接口类和一些反射魔法来实现,但我希望有更多的东西,包括在一个解决方案中完全构建 dll 的东西,包括按需下载 3rd 方库的东西。

任何想法如何做到这一点?

4

3 回答 3

1

您正在寻找允许您从自定义位置加载程序集的AppDomain.AssemblyResolve事件。
您不需要任何其他反射。

于 2010-12-21T14:57:05.923 回答
1

为当前 appdomain 的 AppDomain.ResolveAssembly 和 AppDomain.ResolveType 事件提供事件处理程序并加载程序集。

但要小心将程序集加载到正确的上下文中:http: //msdn.microsoft.com/en-us/library/dd153782.aspx

于 2010-12-21T14:58:58.387 回答
1

您可以调用 AssemblyResolve 事件,该事件在未找到程序集时触发,然后下载它尝试查找的程序集。

你应该阅读这篇文章。

于 2010-12-21T15:00:18.747 回答