emz*_*ero 75 .net asp.net asp.net-mvc .net-framework-version
该项目是一个针对.NET Framework 4.6.1的ASP.NET MVC Web应用程序.
突然(某些NuGet包升级了)我在运行时遇到了以下错误:
CS0012:类型'System.Object'在未引用的程序集中定义.您必须添加对程序集'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运行它可以正常工作.
packages.json
<?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>
Run Code Online (Sandbox Code Playgroud)
使用VS2017将应用程序发布到文件系统时,我在输出中收到以下警告:
下面装配有一个版本是高于目标,可能不会引起故障运行时正确加载.NET Framework的依赖关系:netstandard,版本= 2.0.0.0,文化=中性公钥= cc7b13ffcd2ddd51.依赖项是:System.Transactions,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089.您应该确保依赖程序集对于目标框架是正确的,或者确保要处理的目标框架是从属程序集的目标框架.
但我找不到任何东西System.Transactions.我如何搜索引用它的内容?
Qua*_*ngo 91
我认为解决方案可能是GitHub上的这个问题:
尝试在web.config中添加netstandard引用,如下所示:"
Run Code Online (Sandbox Code Playgroud)<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标准库时,我遇到了很多关于NUGET包和引用破坏的问题.您需要考虑的另一个更改是升级到PackageReferences而不是package.config文件.
请参阅本指南,您可能还需要一个工具来帮助升级.它确实需要一个晚期的VS 15.7版本.
Dam*_*yer 33
我不得不在这个线程上结合其他人的答案。
<Reference Include="netstandard" />kam*_*ilk 21
手动编辑.csproj文件并添加下面的引用对我有用。
<Reference Include="netstandard" />
Run Code Online (Sandbox Code Playgroud)
谢谢Fahad Alshaya 在这里提出的建议。
从 4.6.1 框架升级到 4.7.2 后,我们开始收到此错误:
“类型'System.Object' 是在未引用的程序集中定义的。您必须添加对程序集'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>
Run Code Online (Sandbox Code Playgroud)
小智 6
我以前遇到过这个问题,并尝试了很多方法为我解决了这个问题:
此外,如果这是在完整框架上运行的 .net 核心应用程序,我发现您必须在项目的根目录中包含一个global.json文件,并将其指向要用于该项目的 SDK:
{
"sdk": {
"version": "1.0.0-preview2-003121"
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这是一个旧线程,但我今天遇到了同样的问题,上周我更新了一些 NuGet 包,尽管 MVC 网站在我的开发计算机上运行正常,但当我发布到测试服务器时它失败了。
我读了很多帖子,但没有一个起作用。我最后将本地bin中的DLL与测试服务器中的DLL进行比较,发现netstandard.dll没有上传,一旦上传网站就可以正常工作,不知道为什么VS2017 web部署没有发布DLL。
只是需要注意一下,以防上述方法都不适合您。
小智 5
这是 netstandard.dll 存在的位置:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\netstandard.dll 通过此将引用添加到您的项目。
| 归档时间: |
|
| 查看次数: |
43181 次 |
| 最近记录: |