跨多个程序集实现统一类型

时间:2017-08-07 22:08:09

标签: c# .net binary-compatibility

我有一种情况,我希望在多个程序集中实现相同的类型,但让它们在编译器中显示为"相同"类型。

为什么我要这样做?我正在NuGet包中实现一些基类库,所以我可以更容易地在新项目中使用它们。由于这些新项目可能是WPF应用程序或UWP应用程序,因此其中一些NuGet程序包将在其中包含多个程序集,并在适当的时候针对不同的框架。

考虑以下设计方案。我有一个NuGet包,包含.Net Framework 4.6,Windows 8.1和UWP的类库程序集。它们都实现了具有完全相同签名的IExample。然后,我创建了一个针对.Net Framework 4.5和Windows 8的PCL,其中包含此NuGet包,并定义了一个实现ExampleClass的{​​{1}}。然后,在针对.Net Framework 4.6的WPF应用程序中,我包含了相同的NuGet包和PCL并实例化IExample。我希望能够测试我的ExampleClass实例是否与ExampleClass兼容,即使PCL中IExample的实现使用的ExampleClass声明与IExample不同IExample 1)}在WPF应用程序中用于测试类实例的类型兼容性。

var myClass = new ExampleClass();
if (myClass is IExample)
{
    // class is an example, do something useful.
}

当我在一个简单的测试应用程序中尝试这样的东西时,Visual Studio在is表达式上显示代码气味,表明测试永远不会成立。即使我在接口的所有声明中添加了相同的GUID,问题仍然存在。

我认为这一定是可能的,因为看起来微软在他们的一些NuGet包中做了类似的事情。例如,Microsoft BCL Portability Pack状态的描述:

  

这些类型是统一的"他们的后期版本相当于。例如,在.NET Framework 4.5上运行时,运行时将看到此程序包中的IProgress与平台中已有的类型相同。

需要什么类型的GUID才能使它的多个声明看起来与编译器相同?

0 个答案:

没有答案