如何模拟静态引用程序集?

3

在C#中,我有一个application.exe,它使用library.dll(编译时引用)。现在library.dll用于与某些硬件通信,这非常缓慢。是否可以在Visual Studio中创建另一个项目,该项目还将创建library.dll,但它将是模拟。我希望能够简单地替换dll文件,而无需重新编译exe或替换Visual Studio中的引用。我知道可以在运行时加载dll,但是否可以替换静态引用的dll而不会导致:

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

我不使用强名称


你在 library.dll 中引用了多少个不同的类? - Seb
该dll包含一个内部类,该类实现了一个接口(在其他地方定义)。它还包含一个公共的静态工厂,可以以正确的方式实例化内部类。Mock也将有一个具有相同签名并返回相同接口的工厂类,但它将实例化Mock类。 - Eiver
你能否更改设计,使得application.exe引用接口而不是library.dll?如果可以的话,你可以使用轻量级容器,例如Spring。这样既不会在library.dll上有引用,也不会在mock上有引用。 - Seb
这是我目前的做法。我像Spring一样动态加载dll。我没有使用Spring本身,因为我认为为了加载一个仅有一个类的微小dll而包括Spring会过度杀伤。但是我想知道这是否是唯一的解决方案或是否还有更好的解决方案。动态链接的一个不好的地方是Visual Studio在编译时无法注意到某些依赖项丢失的问题。 - Eiver
客户端代码依赖于接口,因此对接口的任何修改都将被编译器报告。至于实现程序集,如果接口被修改,编译器应该报告一个错误。 - Seb
1个回答

1

这将会是一件麻烦的事情,只是为了模拟一个dll而已。

我建议您在代码中加入一个特性,用于指示代码是否应该以模拟模式运行,这样就不会调用/调用dll或引用了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接