C# 如何在dotnet控制台应用程序中引用和使用同一程序集的多个版本?
假设我的解决方案中有以下程序集文件引用:C# 如何在dotnet控制台应用程序中引用和使用同一程序集的多个版本?,c#,.net,dll,console-application,.net-assembly,C#,.net,Dll,Console Application,.net Assembly,假设我的解决方案中有以下程序集文件引用: a、 动态链接库 b、 动态链接库 c、 动态链接库 Main_43.dll a_40.dll b_40.dll c_40.dll Main_40.dll 我的控制台应用程序以前只加载前4个,因为客户端使用Main_43.dll,它在内部使用a、b和c dll文件。现在,我必须向我的控制台应用程序添加一个新的客户端,该客户端将使用Main_40.dll,它是Main_43.dll的旧版本(我必须使用旧版本,没有升级选项)。我已经为这个版本重命名了a、b和
Main_40.Export exportData = new Main_40.Export();
还是有更好的办法
程序集文件的强名称为,因此我就是这样进行更改的。我创建了一个文件夹“libs”,其中有两个文件夹v40和v43,我将dll 1到4放在v43中,其余的放在v40中,然后在调用我的类时,动态加载dll。我还确保设置了“始终复制”,以便DLL在生成期间始终移动到文件夹中 现在,当我点击将使用v40 dll的客户端构造函数时,我加载程序集路径,然后创建一个main_40的实例
protected const string mxMainDLLPath = @"libs\v40\Main_40.dll";
dynamic mainObj = null;
public ClientClass()
{
Assembly assembly = Assembly.LoadFrom(mxMainDLLPath );
Type T = assembly.GetType("Main_40.Export");
mainObj = Activator.CreateInstance(T);
}
现在要调用Main_40.dll中的任何方法,我可以执行mainObj.Export()
感谢@NightOwl888的帮助 OP,除非所有不同的程序集都是强名称,否则无法t@MickyD程序集文件的强名称为“”sn-vf a.dll'说它是有效的。其他人也是。公钥是一样的,你读过了吗?请注意,这些是针对.NET Framework的-似乎没有任何文档说明在.NET Core中是否可以这样做。@NightOwl888这些是项目中引用的程序集。我无法在GAC中注册这些DLL。它们都在包含exe的文件夹中。相关: