我有第三方A1.dll,A2.dll和AClass类。 我从我的B1和B2 dlls中引用它,但我想以另一种方式: 我希望我的X.dll使用A1 + A2和B1,B2使用X.重要的是所有名称空间和类在X和A1 + A2中应该是相同的。
修改 X应该是我的A1,A2副本 - 我甚至可以使用X1,X2。然后我可以使用A1,A2的一个许可证 - 用于X,而不是我将来会使用的所有exec和dll。
答案 0 :(得分:2)
因此,如果我理解正确,您希望X.DLL代表第三方DLL。您可以使用Adapter pattern来实现此目的。您希望保留所有名称空间和类的事实非常可怕。那些碰撞将会非常麻烦。您可能不得不诉诸using aliasing directives以保持一定程度的理智。 (如果你控制了B.DLL和X.DLL,为什么要这样做?)
这里说的是X.DLL适配器的模式,它不使用冲突命名方案......
class Adapter: IAdapter//Adapter is a member of X.DLL
{
public AClass aClassMember = new AClass();//A.DLL or A2.DLL member
public void ExposeAClass() {};
}
然后你可以从B.DLL引用X.DLL。
class BClass
{
public IAdapter myAdapter = new Adapter();//Access X's adapter to expose A. Could take a step further with dependency injection...
}
依赖关系图看起来像这样(给出或接受interfaces.dll)
答案 1 :(得分:0)
你的意思是:A1.dll& A2.dll在同一名称空间中定义了相同的类型名称,当你想要引用A1和A1时,你会遇到麻烦。 X.dll中的A2并使用这两种类型中的一种?
要解决此问题,您可以使用“extern别名”。这是C#的一个非常未知的特性:
在你的dll上添加一个extern别名(右键单击程序集的引用 - >属性)
然后,在.cs文件的顶部,只需输入:
extern alias myAlias;
using okType = myAlias::DuplicateNamespace.DuplciateType;
并在代码中使用它:
var my = new okType();
ps:如果我误解你,我的回答可能无关紧要:)