2011-12-28 56 views
1

我有以下问题:
我有一个解决方案,例如, Core.prjExtension.prj
现在,Core.prj引用了一个名为profile.dll(v1)和Extension.prj的dll,它引用了具有相同名称和相同名称空间但不同版本profile.dll(v2)的dll。 Extension.prj也参考Core.prj项目。
Core.prj具有源文件,例如, A.cs,其中定义了一些虚拟方法。 Extension.prj有一个源文件,例如B.cs它有一些方法覆盖A.cs中定义的虚拟方法,从Core.prjexe和dll引用dll具有相同的名称和相同的命名空间

我的想法是构建并运行Extension.prj,并在B.cs中调用A.cs中的虚拟方法来避免重写方法。现在,在B.cs方法将使用类型从profile.dll(V2)和方法A.cs将使用类型从profile.dll(V1),但这是不可能的,因为从A.cs使用类型的虚拟方法从profile.dll(V2),而不是从profile.dll(V1 )。

这种想法引用不同版本的DLL,具有相同的名称和命名空间,从EXE和DLL无论如何可行?

+0

我知道你可能有你的理由,但使用不同的版本在运行同一个库的是要不惜一切代价避免的噩梦。您当然可以在环境中使用同一个库的不同版本,只需使用程序集重定向来“升级”应用程序使用的版本,但通常应用于整个解决方案,而不是解决方案内部。 – 2011-12-28 12:42:05

回答

1

我认为你可以在这种情况下使用extern alias指令。

从MSDN:

要引用两个组件具有相同的完全限定的类型名称, 别名必须在命令提示来指定,如下所示:

/R:GridV1 =格.DLL

/r:GridV2=grid20.dll

这将创建外部别名GridV1和GridV2。要在程序中使用这些 别名,请使用extern 关键字引用它们。例如:

extern alias GridV1;

extern alias GridV2;

http://msdn.microsoft.com/en-us/library/ms173212.aspx

相关问题