【发布时间】:2018-02-16 08:00:23
【问题描述】:
假设我的解决方案中有以下程序集文件参考:
- a.dll
- b.dll
- c.dll
- Main_43.dll
- a_40.dll
- b_40.dll
- c_40.dll
- Main_40.dll
我的控制台应用程序以前只加载前 4 个,因为客户端使用内部使用 a、b 和 c dll 文件的 Main_43.dll。现在,我必须向我的控制台应用程序添加一个新客户端,它将使用 Main_40.dll,这是 Main_43.dll 的旧版本(我必须使用旧版本。没有升级选项)。如上所示,我通过后缀“_40”重命名了此版本的 a、b 和 c dll 文件。
我已经在我的控制台应用程序中引用了所有这些。如何根据我传递给控制台应用程序的参数告诉应用程序使用 Main_43 或 Main_40,我如何确定 Main_40 将引用适用于 v40 的 a、b 和 c dll 文件,反之亦然?
另外,在我的程序中调用可能在两个 dll 中的方法的最佳做法是什么? 我应该使用完整的参考名称,例如:
Main_40.Export exportData = new Main_40.Export();
或者有更好的方法吗?
程序集文件是强命名的
【问题讨论】:
-
OP,除非所有不同的程序集都强命名你不能
-
@MickyD 程序集文件是强命名的。 'sn -vf a.dll' 表示有效。其余的也是如此。公钥是一样的
-
你读过Side-by-Side Execution in the .NET Framework、Assemblies and Side-by-Side Execution和Guidelines for Creating Components for Side-by-Side Execution吗?请注意这些是针对 .NET Framework 的 - 似乎没有任何文档说明这在 .NET Core 中是否可行。
-
@NightOwl888 这些是项目中引用的程序集。我无法在 GAC 中注册这些 dll。它们都在带有 exe 的文件夹中。
标签: c# .net dll console-application .net-assembly