如何在 dotnet 控制台应用程序中引用和使用同一程序集的多个版本?

How to reference and use multiple versions of same assembly in dotnet console application?

假设我的解决方案中有以下程序集文件参考:

  1. a.dll
  2. b.dll
  3. c.dll
  4. Main_43.dll
  5. a_40.dll
  6. b_40.dll
  7. c_40.dll
  8. Main_40.dll

我的控制台应用程序以前只加载前 4 个,因为客户端使用 Main_43.dll,它在内部使用 a、b 和 c dll 文件。现在,我必须向我的控制台应用程序添加一个新客户端,它将使用 Main_40.dll 这是 Main_43.dll 的旧版本(我必须使用旧版本。没有升级选项)。如上所示,我通过添加后缀“_40”重命名了此版本的 a、b 和 c dll 文件。

我已经在我的控制台应用程序中引用了所有这些。我如何根据传递给控制台应用程序的参数告诉应用程序使用 Main_43 或 Main_40,以及我如何确定 Main_40 将引用 a、b 和 c dll 文件适用于 v40,反之亦然?

此外,在我的程序中调用可能会在两个 dll 中的方法的最佳做法是什么? 我应该使用完整的参考名称,例如:

Main_40.Export exportData = new Main_40.Export(); 

或者有更好的方法吗?

程序集文件是强命名的

这就是我进行更改的方式。我创建了一个文件夹 'libs',在该文件夹下我有 2 个文件夹 v40 和 v43,我将 dll 1 到 4 放在 v43 中,其余的放在 v40 中,然后当我的 class 被调用时,我加载了 dll动态地。我还确保设置了 'Copy always',以便在构建期间始终将 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 提供的所有帮助。