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

该项目是一个基于 .NET Framework 4.6.1 ASP.NET MVC Web 应用程序

突然之间(一些NuGet 包升级了),我开始在运行时得到以下错误:

CCS0012: 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下运行,它就可以工作。

链接到。csproj gist

packages.config

























































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

以下程序集依赖于.NET版本 框架,高于目标,可能无法正确加载 在运行时导致失败:netstandard,版本=2.0.0.0, 文化=中立,都必须cc7b13ffcd2ddd51。的依赖关系 是:系统。事务,版本=4.0.0.0,文化=中性, 都要。你应该确保 依赖的程序集对于目标框架是正确的,或者确保 您正在处理的目标框架是依赖的框架 组装。< / p >

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

207002 次浏览

可能与以下其中之一有关:

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

我以前遇到过这种情况,我尝试了一些方法来解决它:

  • 如果存在bin文件夹,请删除
  • 删除隐藏的。vs文件夹
  • 确保安装了4.6.1目标包
  • 最后的努力:给系统添加一个引用。运行时(右键单击项目->添加->引用->勾选系统。运行时),尽管我认为我总是想出上面的一个解决了它,而不是这样做。

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

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

我认为解决方案可能是这个问题在GitHub上:

尝试在web中添加netstandard引用。这样配置:

<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是很重要的,因为旧的框架版本并不完全兼容。net标准2.0。

我从痛苦的经历中了解到这一点,当我引入。net标准库时,我遇到了很多NUGET包和引用中断的问题。你需要考虑的另一个变化是升级到PackageReferences而不是package.config文件。

看到本指南,你可能也想要一个帮助升级的工具。不过它确实需要一个vs15.7的后期版本。

本文以您所安装的visual studio和Windows版本为例,请按照以下步骤进行操作:—

  1. 进入命令窗口
  2. 通过以下命令降级您的PCL

    Install-Package Xamarin.Forms -Version 2.5.1.527436
    
  3. Rebuild Your Project.
  4. Now You will able to see the required output

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

我读了很多帖子,但没有一个有用。我最终比较了我本地bin中的DLL和测试服务器中的DLL,发现netstandard.dll没有上传,上传后网站工作正常,不知道为什么VS2017 web部署没有发布DLL。

只是为了防止上面这些方法对你都不起作用。

删除Bin和Obj文件夹对我来说很有效。

手动编辑.csproj文件并添加下面的引用对我来说是可行的。

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

谢谢Fahad Alshaya的建议。

我在把。net Core 1.1升级到2.1时就遇到过这种情况。

我遵循在这里概述的说明。

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

从4.6.1框架升级到4.7.2之后,我们开始得到这个错误:

“系统类型。对象在未引用的程序集中定义。你必须添加一个引用到程序集'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框架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 < / p >

  2. 重启机器

  3. 使用。net Framework确认版本 李如何找到。net版本? < / p > < / >

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

我不得不在这个帖子上结合其他人的答案。

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

enter image description here

在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
Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\ADL
Tools\2.4.0000.0\ASALocalRun\netstandard.dll**

3 -

Copy Above Path Dll to Application Bin Folder on web server

当我试图将. net standard依赖项添加到. net 4.6.1库中,并在Linux Mono 4.6.2 (Ubuntu 16.04附带的版本)中编译它时,就遇到了这个问题。

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

  1. 在.csproj文件中将<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>更改为<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
  2. 将您的mono升级到新版本。我相信。x应该可以工作,但为了确定,你可以只安装Ubuntu 20.04(在撰写本文时只是预览版),它包含Mono 6.8.0.105。

你可以添加到你的网络。在项目中配置。

当你把它添加到项目web时,它不会工作。config,因为它与MVC一起工作。

那些没有网络的人。配置文件。输出类型不是web应用程序。 用下面给出的代码更新项目文件(.csproj)

这可能是由于添加/删除。net框架的方式不正确,也可能是由于意外的方式中断。

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

输出类型

  • 控制台应用程序
  • 类库

半边天的解决方案正在工作,但我更喜欢通过在我的Web中添加这段代码来解决它。像新项目一样配置:

<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

就我而言,我已经将我的VS 2019更新到5月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框架4.6.1,当我使用最新的MSBuild(16.10.2)构建解决方案时,我得到了一个错误消息,例如ValueType…您必须参考netstandard 2.0.....

我是通过安装。net SDK项目发现的,当你选择这个项目时,。net 5.0运行时和。net 3.1运行时也会被安装。

enter image description here

在我安装了这个项目后,我可以用最新的MSBuild构建我的项目,没有错误!

我也有同样的问题,每隔一段时间就会出现一次,可能是由于切换分支。

4.6.1的使用。Visual studio 2019, resharper…

我的解决方案是手动添加一个新的引用,浏览到netstandard.dll,添加它,构建(错误很多),删除引用,再次构建(没有错误)。

对我来说,这就像网络框架设置错误一样简单。配置文件。

解决方案是4.8,但网络。配置为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" />
虽然我知道这是一个老问题,但我今天也遇到了同样的问题 You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'和我遇到了一个更最新的答案

它在本地构建,但一旦我把它推到构建服务器,它就出现了这个错误。对我来说,修复是确保构建代理使用VS2019,而不是即将退役的构建服务器上的VS2015。