如何切换 .NET 程序集来执行一种方法?
我的 .NET 应用程序有不同版本的 dll,大多数时候我想使用最新的版本。但是,有一种方法在单独的线程上运行,我需要能够根据某些条件选择旧版本的 dll。
我了解到,不可能只加载程序集,然后在默认应用程序域中卸载它(我不能只保留加载两个版本,因为这样我就会遇到类型的重复定义问题)
可能我必须创建一个单独的AppDomain,在那里加载程序集然后卸载它。该应用程序域将在单独的线程上仅执行一种方法,并可使用不同版本的库。
您认为这是一个好方法/您有更好的想法/您能给我指出一些可以让我开始的来源吗?
多谢 ;)
I have different versions of dlls for my .NET application and most of the time I want to use the latest one. However, there is one method which I run on a separate thread where I need to be able to select an older version of the dll based on some criteria.
I have learned that it is not possible to just load an assembly and then unload it within the default application domain (I can't just keep both versions loaded because then I'm running into duplicate definitions of types problem)
Probably I have to create a separate AppDomain, load the assembly there and then unload it. This application domain would execute just one method on a separate thread and would work with a different version of the library.
Do you think it is a good approach / have you better ideas / can you point me to some source which would get me started ?
Thanks a lot ;)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尝试这样的事情:
并创建一个代理类(必须继承自
MarshalByRefObject
)Try something like this:
And create a proxy class (must inherit from
MarshalByRefObject
)为什么不重写新的库,以在不同的方法中使用旧版本的代码并在需要时调用?
Why not rewrite you new library to have the older verion of the code in a different method and call when needed?
也许您可以使用外部别名,请参阅 what-use-is-the-aliases-property-of- assembly-references-in-visual-studio-8
您应该能够为程序集的两个版本指定别名,并使用您的代码中有相同的前缀。
Purhaps you could use extern alias, see what-use-is-the-aliases-property-of-assembly-references-in-visual-studio-8
You ought to be able to specify an alias for the two versions of the assembly, and use same prefix's in your code.