如何切换.NET程序集以执行一种方法?

我的.NET应用程序有不同版本的dll,大多数时候我想使用最新版本的dll。 但是,有一种方法可以在一个单独的线程上运行,我需要能够根据某些条件选择较旧版本的dll。

我已经知道只能加载一个程序集然后在默认的应用程序域中卸载它(我不能只保持两个版本都加载,因为那时我遇到了类型问题的重复定义

可能我必须创建一个单独的AppDomain,在那里加载程序集然后卸载它。 此应用程序域将在单独的线程上执行一个方法,并且可以使用不同版本的库。

你认为这是一个好方法/你有更好的想法/你能指出一些能让我入手的资源吗?

非常感谢 ;)

尝试这样的事情:

class Program { static void Main(string[] args) { System.Type activator = typeof(ApplicationProxy); AppDomain domain = AppDomain.CreateDomain( "friendly name", null, new AppDomainSetup() { ApplicationName = "application name" }); ApplicationProxy proxy = domain.CreateInstanceAndUnwrap( Assembly.GetAssembly(activator).FullName, activator.ToString()) as ApplicationProxy; proxy.DoSomething(); AppDomain.Unload(domain); } } 

并创建一个代理类(必须从MarshalByRefObjectinheritance)

 class ApplicationProxy : MarshalByRefObject { public void DoSomething() { Assembly oldVersion = Assembly.Load(new AssemblyName() { CodeBase = @"c:\yourfullpath\AssemblyFile.dll" }); Type yourOldClass = oldVersion.GetType("namespace.class"); // this is an example: your need to correctly define parameters below yourOldClass.InvokeMember("OldMethod", BindingFlags.Public, null, null, null); } } 

为什么不重写新的库以使用不同的方法获得代码的旧版本并在需要时调用?

 public void MyNewMethod(){} public void MyLegacyMethod(){} 

也许您可以使用extern别名,请参阅what-use-the-aliases-property-of-assembly-references-in-visual-studio-8

您应该能够为程序集的两个版本指定别名,并在代码中使用相同的前缀。