我正在尝试构建一个.NET客户端软件包,可以按需下载其组件。
假设我有一个分为主可执行文件和其他20个dll文件的程序。主程序引用了其中的3个,它们引用了其他一些,无论如何......它们有某种类似依赖结构的树。
我想要实现的是仅分发主可执行文件,并按需从服务器位置获取其他所有内容。
这样的事情: 主程序和所有这些dll项目都在一个解决方案中,并像其他任何解决方案一样构建在一起。 在分发时,只分发exe,其他dll(包括使用的一些第三方库)放在可供下载的服务器位置。
exe运行,显示一些UI,当用户点击一个菜单项时,另一个UI窗口将显示一个dll文件,以便操作系统查找dll(不存在),我介入,下载从服务器上获取所需的dll,将它放在exe旁边,然后让操作系统加载它,就好像它从一开始就一样。
这看起来可以通过使用一个通用的接口类和一些反射魔法来实现,但我希望有更多的东西,包括在单个解决方案中完全构建dll,包括第三方库的按需下载
任何想法如何做到这一点?
答案 0 :(得分:1)
您正在寻找AppDomain.AssemblyResolve
event,它允许您从自定义位置加载程序集
你不需要任何其他反思。
答案 1 :(得分:1)
为您当前的appdomain提供AppDomain.ResolveAssembly和AppDomain.ResolveType事件的事件处理程序并加载程序集。
但要小心将程序集加载到正确的上下文中:http://msdn.microsoft.com/en-us/library/dd153782.aspx
答案 2 :(得分:1)
您可以捕获AssemblyResolve事件,该事件在未找到程序集时触发,然后下载它尝试查找的程序集。