使用.NET Framework Web应用程序中的.NET Standard失败,并显示“无法加载文件或程序集…”

问题描述 投票:1回答:1

我正在尝试在.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应用程序.dll引用System.ValueTuple(4.0.2.0),尽管.csproj文件不包含此类引用。
  • 库.dll引用netstandard(2.0.0.0)作为其唯一参考。

我发现我可以通过在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>
c# asp.net .net-standard .net-framework-version
1个回答
0
投票

您还需要将引用添加到ASP.NET Web项目。如this answer中所述,此类项目不支持传递引用。

请确保还将来自引用程序包的所有依赖项也添加为对ASP.NET MVC application的引用,包括System.ValueTuple

© www.soinside.com 2019 - 2024. All rights reserved.