用另一个实现替换.NET程序集

时间:2015-01-15 21:30:10

标签: c# .net .net-assembly

我有一对使用两个不同后端实现相同功能的程序集:

Engine.OpenGL.dll
Engine.DirectX11.dll

是否可以创建一个能够在不重新编译的情况下使用任何这些后端的Visual Studio项目?两个Engine DLL公开的名称空间/类/方法是相同的(或者至少我在项目中使用的名称空间/类/方法是相同的。)

我尝试针对其中一个Engine程序集构建项目,然后将其替换为另一个(通过覆盖dll文件)。这会导致以下错误:

The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我是否必须创建2个单独的项目,它们之间的唯一区别是它们引用哪个引擎DLL?

1 个答案:

答案 0 :(得分:2)

无法创建一个名为“GraphicsEngineContract”的项目,并使用它来定义代表两个不同引擎项目中各个类的接口。然后在您的引擎项目中,您可以确保所有匹配的类实现相同的接口(或者合同项目中的抽象类,如果有的话)。

然后,您将重构主项目以仅引用合同项目中的超类型(抽象类和接口)。最后,您的初始化过程将通过检测本地系统上可用的内容并根据其找到的内容分配具体实例来实现滚动。

然后它不会是 - 或者。您可以在本地复制这两个引用,并根据最终用户计算机上安装的内容为它们创建对象。

如果您遵循这种方法,您最终可能会得到四个项目。主要项目,合同项目,directx项目和opengl项目。