您必须添加对 assembly 'netstandard, Version=2.0.0.0 的引用

You must add a reference to assembly 'netstandard, Version=2.0.0.0

该项目是一个针对 .NET Framework 4.6.1 的 ASP.NET MVC Web 应用程序。

突然之间(一些 NuGet 包已升级)我在 运行 时间开始出现以下错误:

CS0012: The type 'System.Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

在我的主视图 Index.cshtml 中,在我使用 @Html.ActionLink

的一行中

我的机器上确实安装了 .NET Core SDK 2.0 和 .NET Framework 4.7.1,但我不想包含对它的引用。这只是一个 .NET Framework Web 应用程序,它托管在 Windows IIS 上,其中安装的框架是 4.6.1,服务器中没有安装 NET Core。

那么为什么要添加对 netstandard 的引用?如何在不引用 netstandard 而引用完整的 Windows .NET Framework 4.6.1 的情况下修复它?

我检查了之前的提交,它运行良好,但我仍然收到此错误。所以它与正在升级的 NuGet 包无关。似乎是我本地开发机器上的东西。

如果将应用程序发布到目录并运行它与 IIS 一起工作。

Link to .csproj gist

packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Antlr" version="3.5.0.2" targetFramework="net46" />
  <package id="BundleTransformer.Core" version="1.9.69" targetFramework="net46" />
  <package id="BundleTransformer.Handlebars" version="1.9.73" targetFramework="net46" />
  <package id="BundleTransformer.Less" version="1.9.69" targetFramework="net46" />
  <package id="BundleTransformer.Yui" version="1.9.52" targetFramework="net46" />
  <package id="Dapper" version="1.42" targetFramework="net46" />
  <package id="EcmaScript.Net" version="1.0.1.0" targetFramework="net46" />
  <package id="EntityFramework" version="6.0.0" targetFramework="net46" />
  <package id="Glimpse" version="1.8.6" targetFramework="net46" />
  <package id="Glimpse.AspNet" version="1.9.2" targetFramework="net46" />
  <package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net46" />
  <package id="JavaScriptEngineSwitcher.Core" version="1.2.4" targetFramework="net46" />
  <package id="JavaScriptEngineSwitcher.V8" version="1.3.0" targetFramework="net46" />
  <package id="jQuery" version="2.1.3" targetFramework="net46" />
  <package id="jQuery.Validation" version="1.13.1" targetFramework="net46" />
  <package id="LowercaseDashedRoute" version="1.0.14" targetFramework="net46" />
  <package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" />
  <package id="Microsoft.Owin" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net46" />
  <package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net46" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Moment.js" version="2.10.2" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
  <package id="NWebsec" version="5.1.1" targetFramework="net46" />
  <package id="NWebsec.Core" version="2.1.0" targetFramework="net46" />
  <package id="NWebsec.Mvc" version="5.1.1" targetFramework="net46" />
  <package id="Owin" version="1.0" targetFramework="net46" />
  <package id="Respond" version="1.4.2" targetFramework="net46" />
  <package id="Sendgrid" version="6.3.0" targetFramework="net46" />
  <package id="SendGrid.SmtpApi" version="1.3.1" targetFramework="net46" />
  <package id="Serilog" version="2.6.0" targetFramework="net46" />
  <package id="Serilog.Enrichers.Environment" version="2.1.2" targetFramework="net46" />
  <package id="Serilog.Sinks.File" version="3.2.0" targetFramework="net46" />
  <package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net46" />
  <package id="Serilog.Sinks.Sentry" version="2.1.4" targetFramework="net46" />
  <package id="SerilogWeb.Classic" version="2.1.17" targetFramework="net46" />
  <package id="SharpRaven" version="2.2.0" targetFramework="net46" />
  <package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net46" />
  <package id="System.Data.SQLite.Linq" version="1.0.108.0" targetFramework="net46" />
  <package id="Twitter.Bootstrap.Less" version="3.3.4" targetFramework="net46" />
  <package id="WebActivatorEx" version="2.0.6" targetFramework="net46" />
  <package id="WebGrease" version="1.6.0" targetFramework="net46" />
  <package id="YUICompressor.NET" version="2.7.0.0" targetFramework="net46" />
</packages>

使用 VS2017 将应用程序发布到文件系统时,我在输出中收到以下警告:

The following assembly has dependencies on a version of the .NET Framework that is higher than the target and might not load correctly during runtime causing a failure: netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51. The dependencies are: System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. You should either ensure that the dependent assembly is correct for the target framework, or ensure that the target framework you are addressing is that of the dependent assembly.

但我在 System.Transactions 上找不到任何内容。我如何搜索引用它的内容?

可能与其中之一有关:

  1. 安装更新的 SDK。
  2. 在 .csproj 中检查参考包含="netstandard"
  3. 检查 Views\Web.config 和 Web.config.
  4. 中编译标签中的程序集版本

我之前已经 运行 解决了这个问题,尝试了很多东西已经为我解决了这个问题:

  • 删除一个 bin 文件夹(如果存在)
  • 删除隐藏的 .vs 文件夹
  • 确保安装了 4.6.1 目标包
  • 最后的努力:添加对 System.Runtime 的引用(右键单击项目 -> 添加 -> 引用 -> 勾选 System.Runtime 旁边的方框),尽管我想我一直认为以上之一已经解决了它而不是这样做。

此外,如果这是一个 .net 核心应用 运行ning 在完整框架上,我发现您必须在项目的根目录中包含一个 global.json 文件并将其指向添加到您要用于该项目的 SDK:

{
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}

我认为解决方案可能是 this issue on GitHub:

Try add netstandard reference in web.config like this:"

<system.web>
  <compilation debug="true" targetFramework="4.7.1" >
    <assemblies>
      <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
            PublicKeyToken=cc7b13ffcd2ddd51"/>
    </assemblies>
  </compilation>
  <httpRuntime targetFramework="4.7.1" />

我知道您使用的是 4.6.1,但选择 .NET 4.7.1 很重要,因为较旧的 Framework 版本与 .NET Standard 2.0 不完全兼容。

我从痛苦的经历中了解到这一点,当我引入 .NET Standard 库时,我遇到了很多 NUGET 包和引用中断的问题。您需要考虑的另一项更改是升级到 PackageReferences 而不是 package.config 文件。

参见 this guide and you might also want a tool to help the upgrade。不过它确实需要较晚的 VS 15.7 版本。

此问题是基于您安装的visual studio和Windows版本,您可以按照以下步骤操作:-

  1. 转到命令 Window
  2. 通过以下命令

    降级了您的PCL
    Install-Package Xamarin.Forms -Version 2.5.1.527436
    
  3. 重建您的项目。
  4. 现在您将能够看到所需的输出

虽然这是一个旧线程,但我今天遇到了同样的问题,上周我更新了一些 NuGet 包,虽然 MVC 网站在我的开发机器上运行正常,但当我发布到测试服务器时它失败了。

我阅读了很多帖子,但 none 有效。我最终将本地 bin 中的 DLL 与测试服务器中的 DLL 进行了比较,发现 netstandard.dll 未上传,上传后网站运行正常,不确定为什么 VS2017 web 部署没有发布 DLL。

如果 none 以上对您有用,请注意一些事项。

删除 Bin 和 Obj 文件夹对我有用。

手动编辑 .csproj 文件并添加下面的参考对我有用。

<Reference Include="netstandard" />

感谢 Fahad Alshaya 的建议here

我在将 .NET Core 1.1 升级到 2.1 时遇到过这种情况。

我遵循了 here 中列出的说明。

尝试删除 .csproj 中的 <RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion><NetStandardImplicitPackageVersion> 部分。

从 4.6.1 框架升级到 4.7.2 后,我们开始收到此错误:

"The type 'System.Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'." 最终解决方案是添加上面提到的 "netstandard" 程序集引用:

<compilation debug="true" targetFramework="4.7.1" >
    <assemblies>
      <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
            PublicKeyToken=cc7b13ffcd2ddd51"/>
    </assemblies>
  </compilation>

部署从 4.6.1 迁移到 4.7.2 的应用程序后,我们开始在生产服务器上收到此错误。

我们注意到那里没有安装 .NET Framework 4.7.2。为了解决这个问题,我们做了以下步骤:

  1. 从以下位置安装了 .NET Framework 4.7.2:

    https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows

  2. 重启机器

  3. 在以下帮助下确认了.NET Framework 版本 How do I find the .NET version?

运行 再次在机器上安装 .Net Framework 4.7.2 版本的应用程序解决了这个问题。

我不得不结合其他人在这个话题上的回答。

  1. 通过 NuGet
  2. 安装 NetStandard.Library
  3. 正在手动编辑 .csproj 文件并添加引用。 <Reference Include="netstandard" />
  4. 展开项目-->VS 解决方案资源管理器中的引用,右键单击 'netstandard' 并显示属性页面并将 "Copy Local" 设置为 true。

在 netstandard.dll 属性中将 Copy Enbale 设置为 true。

打开解决方案资源管理器并右键单击 netstandard.dll。 将复制本地设置为 true。

我遇到了同样的问题,我在安装应用程序后遇到了同样的问题

1-

<compilation debug="true" targetFramework="4.7.1">
      <assemblies>
        <add assembly="netstandard, Version=2.0.0.0, Culture=neutral, 
      PublicKeyToken=cc7b13ffcd2ddd51"/>
      </assemblies>
    </compilation>

2- 添加引用

 **C:\Program Files (x86)\Microsoft Visual
Studio17\Professional\Common7\IDE\Extensions\Microsoft\ADL
 Tools.4.0000.0\ASALocalRun\netstandard.dll**

3-

Copy Above Path Dll to Application Bin Folder on web server

我在尝试将 .NETStandard 依赖项添加到 .NET4.6.1 库并使用 Mono 4.6.2([=24= 附带的版本)在 Linux 中编译时遇到了这个问题] 16.04).

今天终于解决了;解决方案需要做这两件事:

  1. 在 .csproj 文件中将 <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion> 更改为 <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
  2. 将您的单声道升级到更新版本。我相信 5.x 应该可以工作,但可以肯定的是,您可以只安装 Ubuntu 20.04(在撰写本文时仅处于预览状态),其中包括 Mono 6.8.0.105。

您可以在您的项目中添加 web.config。

将它添加到项目时它不会工作web.config,因为它适用于 MVC。

那些没有 web.config 文件的人。 Web 应用程序以外的输出类型。 使用以下代码更新项目文件 (.csproj)。

这可能是由于 adding/removing .netframework 以不正确的方式或可能以意外方式中断。

  <ItemGroup>
    <Reference Include="netstandard" />
  </ItemGroup>

输出类型

  • 控制台应用程序
  • Class图书馆

Quango 的解决方案正在运行,但我更喜欢通过在我的 Web.config 中添加此代码来解决它,就像新项目一样:

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

这是 netstandard.dll 存在的地方: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\netstandard.dll 通过这个将 ref 添加到您的项目。

就我而言,我已经将我的 VS 2019 更新到 05/21 的最新版本,但仍然遇到同样的问题。

我通过

解决了
  1. 仔细看报错信息 The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'system.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
  2. 打开 .csproj 文件并在 <ItemGroup> 标签下添加一个新的 <Reference> 标签,如下所示
  • <Reference Include="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  1. 按照 VS 提示重新加载项目,然后重新构建,我没有看到同样的问题。

我在 net5.0 项目中遇到了同样的问题,其中包括使用 netstandard2.0

编写的构建任务
<Project>

  <Target Name="RestoreBuildTasks">
    <MSBuild Projects="../../../BuildTasks/BuildTasks.csproj" Targets="Restore" Properties="Configuration=Release"/>
  </Target>

  <Target Name="BuildBuildTasks">
    <MSBuild Projects="../../../BuildTasks/BuildTasks.csproj" Targets="Build" Properties="Configuration=Release"/>
  </Target>

  <UsingTask
      TaskName="Brick.Build.NugetTask"
      AssemblyFile="AGXBrick/BuildTasks/bin/$(Platform)/Release/netstandard2.0/BuildTasks.dll"/>

  <Target Name="CheckNuGetSources" BeforeTargets="Restore" DependsOnTargets="RestoreBuildTasks;BuildBuildTasks">
      <NuGetTask />
  </Target>

</Project>

BuildTasks.csproj 看起来像这样

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>

我能够通过在 MSBuild 任务中显式设置 TargetFramework=netstandard2.0 来解决这个问题:

    <MSBuild Projects="../../../BuildTasks/BuildTasks.csproj" Targets="Restore" Properties="Configuration=Release;TargetFramework=netstandard2.0"/>

我遇到了同样的问题,我的项目使用 .net Framework 4.6.1,当我使用最新的 MSBuild(16.10.2) 构建解决方案时,我收到一条错误消息,例如ValueType ...您必须参考 netstandard 2.0.....

我是通过安装 .Net SDK 项目弄明白的,当你 select 这个项目时,.NET 5.0 运行时和 .NET 3.1 运行时也会安装。

安装此项目后,我可以使用最新的 MSBuild 构建我的项目并且没有错误!

我遇到了同样的问题,而且每隔一段时间就会出现一次,可能是因为切换分支。

使用 4.6.1。 Visual studio 2019, resharper...

我的解决方案是手动添加新引用,浏览到 netstandard.dll,添加它,构建(大量错误),删除引用,再次构建(无错误)。

对我来说,就像 web.config 文件中的框架设置错误一样简单。

解决方案是 4.8 但 web.config 是 4.5.1

来自

<httpRuntime requestValidationMode="2.0" maxRequestLength="8192" executionTimeout="110" targetFramework="4.5.1" />

<httpRuntime requestValidationMode="2.0" maxRequestLength="8192" executionTimeout="110" targetFramework="4.8" />