我正在尝试在.NET Framework ASP.NET Web应用程序中使用.NET标准库,并且经常遇到与类型加载有关的错误。我已将问题重现如下:
https://github.com/sgarshol/VTSample
我用一个类构建了一个简单的.NET Standard 2.0
库:
namespace VTLib
{
public class VTMaker
{
public (int, string) GetVT()
{
return (3, "value");
}
}
}
我已经在控制台应用程序和ASP.NET MVC
应用程序(均为.NET Framework v4.6.2
)中引用此库作为项目引用。两个项目都实例化该类并调用GetVT()
。
控制台应用程序运行正常。
Web应用程序没有,并且我收到以下错误:
无法加载文件或程序集'System.ValueTuple,版本= 0.0.0.0,区域性=中性,PublicKeyToken = cc7b13ffcd2ddd51'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)
检查我的Web应用程序/ bin文件夹,发现以下.dlls
:
/ bin / System.ValueTuple.dll(4.0.2.0,msil,.Net Framework v4.0)/bin/roslyn/System.ValueTuple.dll(4.0.1.0,msil,.Net Framework v.4.6.2)
使用JetBrains dotPeek,我检查了Web应用程序.dll
和库.dll
,并收集了以下内容:
我发现我可以通过在Web.config文件中手动添加程序集重定向指令来“解决”该问题:
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" />
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
</dependentAssembly>
您还需要将引用添加到ASP.NET Web项目。如this answer中所述,此类项目不支持传递引用。
请确保还将来自引用程序包的所有依赖项也添加为对ASP.NET MVC application
的引用,包括System.ValueTuple