C# 拖放DLL引发MissingMethodException

C# 拖放DLL引发MissingMethodException,c#,.net,dll,nuget,C#,.net,Dll,Nuget,我们有一个应用程序A,它引用了包含一些静态方法的程序集B。程序集B与应用程序A位于同一Visual Studio解决方案中 我们希望应用程序A的用户能够编写插件。他们(目前)通过在VisualStudio中创建一个新的类库解决方案,获取应用程序a的Nuget包,并在插件解决方案中添加对程序集B的引用来构建插件,这样插件代码就可以编译了 他们不需要测试他们的插件,这就是代码只需要编译的原因,尽管如果他们可以在应用程序A中运行代码时调试代码会很好 一旦他们的代码编译完成,插件的DLL就会被放在一个共

我们有一个应用程序A,它引用了包含一些静态方法的程序集B。程序集B与应用程序A位于同一Visual Studio解决方案中

我们希望应用程序A的用户能够编写插件。他们(目前)通过在VisualStudio中创建一个新的类库解决方案,获取应用程序a的Nuget包,并在插件解决方案中添加对程序集B的引用来构建插件,这样插件代码就可以编译了

他们不需要测试他们的插件,这就是代码只需要编译的原因,尽管如果他们可以在应用程序A中运行代码时调试代码会很好

一旦他们的代码编译完成,插件的DLL就会被放在一个共享中,并交给另一个团队(我知道是官僚机构),他们将其与应用程序a的DLL的其余部分放在一起

我希望插件DLL使用程序集B DLL,该DLL与应用程序A的所有DLL一起使用

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

我尝试过的事情: 如果您在应用程序A的VisualStudio解决方案中创建并编译插件,插件解决方案肯定可以正常工作

应用程序A使用framework.NET4.5,程序集B使用framework.NET4.0,我尝试使用这两个框架构建插件,但都没有成功

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

我欢迎立即解决这个问题,同时也欢迎就如何让这些插件工作提出更广泛的体系结构建议。很抱歉,如果有重复的问题,我找不到

对于初学者,您可以使用“Dotpeek”来反编译dll,并查看方法定义是否完全匹配。 这是一个可用于反编译dotnet库的免费软件。 如果您无法访问.pdb文件,那么我建议您使用“dotnet reflector”或“IL Spy”,它将在不使用pdb文件的情况下反编译

还要确保引用的是visual studio中的project,而不是输出dll。

对于初学者,可以使用“Dotpeek”来反编译dll,并查看方法定义是否完全匹配。 这是一个可用于反编译dotnet库的免费软件。 如果您无法访问.pdb文件,那么我建议您使用“dotnet reflector”或“IL Spy”,它将在不使用pdb文件的情况下反编译


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

我已按如下方式解决了问题:

尽管插件仅直接使用程序集B中的静态方法,但这些静态方法实际上对各种其他程序集进行了一系列调用

我没有在插件中添加对程序集B的引用,而是执行了一个Nuget命令:

Install-Package -Id AppA -ProjectName Plugin
这将最新的AppA下载到packages文件夹,并为AppA的每个dll添加了一个引用


与之前一样,它已编译,但这次当我将插件dll拖到AppA bin文件夹中时,插件代码运行时没有引发异常。

我成功地解决了我的问题,如下所示:

尽管插件仅直接使用程序集B中的静态方法,但这些静态方法实际上对各种其他程序集进行了一系列调用

我没有在插件中添加对程序集B的引用,而是执行了一个Nuget命令:

Install-Package -Id AppA -ProjectName Plugin
这将最新的AppA下载到packages文件夹,并为AppA的每个dll添加了一个引用

与之前一样,它已编译,但这次我将插件dll拖到AppA bin文件夹中时,插件代码运行时没有引发异常。

或ILSpy(免费)或ILSpy(免费)