【发布时间】:2017-02-04 04:36:46
【问题描述】:
我必须创建一个 C# 库来使用作为 COM 对象的第三方应用程序。目前该应用程序有两个版本,版本 1(旧)和版本 2(新),如下所述,
Version 1 (Sample1.dll)
namespace Sample
{
public interface IApplication
{
string Version { get; }
}
}
Version 2 (Sample2.dll)
namespace Sample
{
public interface IApplication
{
string Version { get; }
}
}
Sample1.dll 的 ProgID 是 Sample.Application.1,Sample2.dll 分别是 Sample.Application.2。
现在我想在我的项目中引用任何版本的 dll 并使用 IApplication 接口。
static void Main(string[] args)
{
int version = 0;
if (int.TryParse(Console.ReadLine(), out version))
{
Type comType = Type.GetTypeFromProgID(String.Format("Sample.Application.{0}", version));
object item = Activator.CreateInstance(comType);
IApplication application = item as IApplication;
Console.WriteLine("Version: {0}", application.Version);
}
}
如果我参考,上面的代码可以工作
1. Sample1.dll and use Sample.Application.1 as ProgID
2. Sample2.dll and use Sample.Application.2 as ProgID
但我想根据 ProgID 动态更改示例 dll 并使用 IApplication 接口。
基本上我想编写支持两个版本的 dll(Sample1.dll 和 Sample2.dll)的代码。
【问题讨论】:
-
你能用不同的名字为 dll 命名吗?你熟悉 .DLL / 命名空间的别名吗?
-
据我了解,如果我使用别名,我必须为两个版本的代码复制代码。就我而言,我必须编写一个支持这两个版本的代码。