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

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

CS0012:“系统”类型。对象定义在一个不存在的程序集中 引用。你必须添加一个引用到程序集的netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'。

在我的主视图索引。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

<?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里什么都找不到。如何搜索引用它的内容?


当前回答

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

进入命令窗口 通过以下命令降级您的PCL 安装包Xamarin的。表单-版本2.5.1.527436 重建你的项目。 现在您将能够看到所需的输出

其他回答

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

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

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

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

感谢Fahad Alshaya的建议。

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

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

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

输出类型

控制台应用程序 类库

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

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

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

我在一个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"/>