【发布时间】:2018-09-30 05:12:56
【问题描述】:
该项目是一个面向 .NET Framework 4.6.1 的 ASP.NET MVC Web 应用程序。
突然间(升级了一些 NuGet 包)我开始在运行时收到以下错误:
CS0012:“System.Object”类型是在未定义的程序集中定义的 参考。您必须添加对程序集“netstandard”的引用, 版本=2.0.0.0,文化=中性,PublicKeyToken=cc7b13ffcd2ddd51'。
在我的主视图Index.cshtml 中,在我使用@Html.ActionLink 的一行中
我的机器中确实安装了 .NET Core SDK 2.0 和 .NET Framework 4.7.1,但我不想包含对它的引用。这只是一个 .NET Framework Web 应用程序,它托管在已安装框架为 4.6.1 的 Windows IIS 上,服务器中没有安装 NET Core。
那么为什么它要求添加对netstandard 的引用?如何在不引用 netstandard 而是引用完整的 Windows .NET Framework 4.6.1 的情况下修复它?
我检查了以前的提交,它运行良好,但我仍然收到此错误。所以它与正在升级的 NuGet 包无关。似乎是我本地开发机器上的东西。
如果将应用程序发布到目录并使用 IIS 运行它,它就可以工作。
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 将应用程序发布到文件系统时,我在输出中收到以下警告:
以下程序集依赖于 .NET 版本 高于目标且可能无法正确加载的框架 在运行时导致失败:netstandard,Version=2.0.0.0, 文化=中性,PublicKeyToken=cc7b13ffcd2ddd51。依赖项 是:System.Transactions,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089。您应该确保 依赖程序集对于目标框架是正确的,或者确保 您正在解决的目标框架是依赖的 组装。
但我在System.Transactions 上找不到任何内容。如何搜索引用它的内容?
【问题讨论】:
-
您使用什么 NuGet 包?你确定你没有引用 ASP.NET Core 吗?
-
@RicardoPeres VS2017 不允许您添加针对与项目所针对的框架不同的框架的包。我已经卸载并重新安装了所有软件包,但错误是一样的。我不明白它为什么会发生,甚至为什么在运行时......
-
System.Data.SQLite.Core包基于 .NET Core(或 .NET Standard,我没有去寻找源代码或文档)。查看项目文件末尾的错误消息。 -
为什么说是基于upn .NET Core?我正在查看
packages\System.Data.SQLite.Core.1.0.108.0\lib目录,它包含每个.NET Framework 版本的文件夹,包括我正在使用的4.6。我认为这不是问题所在。 -
当我遇到这样无法解决的问题时,我要做的是 1) 仔细注意项目的引用是什么(或将 .csproj 保存在某处),2) 删除 packages.config 文件,删除所有外部引用(或者,您可以仅使用原始静态文件、.cs 等从头开始编写新项目),3)将 VS Nuget 配置为使用包引用而不是旧版 packages.config 模式docs.microsoft.com/en-us/nuget/reference/… 和 4)添加所有需要的引用背部。大多数时候,它都有效,但我不知道它之前为什么会失败。
标签: asp.net .net asp.net-mvc .net-framework-version