2016-05-18 59 views
0

我们有一个应用程序A,它具有对包含一些静态方法的程序集B的引用。大会B是在同一个Visual Studio解决方案的应用A.拖放DLL丢失MissingMethodException

我们希望我们的应用程序A的用户能够编写插件。他们通过在Visual Studio中创建一个新的类库解决方案来构建插件(目前),为应用程序A获取Nuget包,并在其插件解决方案中将引用添加到程序集B,以便编译插件代码。

他们并不需要测试他们的插件,这就是为什么代码只需要编译,虽然这将是很好,如果在应用程序A上运行它时,

一旦他们的编译代码,他们可以调试他们的代码,插件的DLL被放入一个共享中,并提供给一个不同的团队(我知道是官僚主义者),他们将其与应用程序A的其余部分放在一起。

我想让插件DLL使用与所有应用程序A的DLL一起使用的程序集B DLL。

当我运行应用程序A时,Activator类拿起插件DLL并正确创建实例,但只要程序集B中的一个静态方法被调用,插件就会抛出MissingMethodException。

事情我已经尝试: 如果你创建和应用内A的Visual Studio解决方案编译该插件的解决方案肯定是正常工作。

应用A使用框架.NET 4.5,组装B使用框架.NET 4.0,我试图建设有没有成功这两个框架的插件。

插件解决方案中引用程序集B的“特定版本”在所有测试情况下都是错误的。

我欢迎这个问题即时解决方案,而且对如何获得这些插件的工作更广泛的架构建议。我很抱歉,如果有重复的问题,我找不到一个。

回答

2

对于初学者来说,你可以使用“Dotpeek”反编译DLL,看看是否该方法认定中的完全匹配。 这是一个可用于反编译dotnet库的免费软件。 如果你没有访问.pdb文件,那么我会建议使用“dotnet反射器”或“IL间谍”它将反编译没有pdb文件。

此外,请确保您在visual studio中引用项目,而不是输出dll。

+0

或ILSpy(这是免费的) –

0

我设法如下,以解决我的问题:

虽然插件只直接用于组件B静态方法,这些静态方法实际上是由调用各种其他组件链。

而不是仅仅在我的插件添加到组件B的参考,我做了的NuGet命令:

Install-Package -Id AppA -ProjectName Plugin 

而这个下载了最新的APPA到包文件夹,并添加到APPA的每个DLL的参考。

像以前一样,它编译,但是这一次,当我拖着插件的dll到APPA bin文件夹,插件代码运行,没有抛出异常。