该项目是一个面向 .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 应用程序,它托管在已安装框架为 4.6.1 的 Windows IIS 上,服务器中没有安装 NET Core。
那么为什么它要求添加对 netstandard
的引用?如何在不引用 netstandard
而是完整的 Windows .NET Framework 4.6.1 的情况下修复它?
我已经检查了以前的提交,它运行良好,但我仍然收到此错误。所以它与正在升级的 NuGet 包无关。似乎是我本地开发机器上的东西。
如果将应用程序发布到目录并使用 IIS 运行它,它就可以工作。
包.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 Framework 版本,并且在运行时可能无法正确加载导致失败:netstandard、Version=2.0.0.0、Culture=neutral、PublicKeyToken=cc7b13ffcd2ddd51。依赖项是:System.Transactions、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089。您应该确保依赖程序集对于目标框架是正确的,或者确保您正在处理的目标框架是依赖程序集的框架。
但我在 System.Transactions
上找不到任何东西。如何搜索引用它的内容?
System.Data.SQLite.Core
包基于 .NET Core(或 .NET Standard,我没有去寻找源代码或文档)。查看项目文件末尾的错误消息。
packages\System.Data.SQLite.Core.1.0.108.0\lib
目录,它包含每个 .NET Framework 版本的文件夹,包括我正在使用的 4.6。我不认为这是这里的问题。
我认为解决方案可能是this issue on GitHub:
尝试在 web.config 中添加 netstandard 引用,如下所示:"
我知道您使用的是 4.6.1,但 .NET 4.7.1 的选择很重要,因为较旧的 Framework 版本与 .NET Standard 2.0 不完全兼容。
我从痛苦的经历中知道这一点,当我介绍 .NET Standard 库时,我遇到了很多关于 NUGET 包和引用中断的问题。您需要考虑的另一项更改是升级到 PackageReferences 而不是 package.config
文件。
请参阅 this guide,您可能还需要 tool to help the upgrade。不过,它确实需要一个后期的 VS 15.7 版本。
手动编辑 .csproj 文件并添加下面的参考对我有用。
<ItemGroup>
<Reference Include="netstandard" />
</ItemGroup>
感谢 Fahad Alshaya 的建议here。
<add assembly="netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51"/>
可以。我一直在从一种解决方案到另一种解决方案来回切换,参考不起作用,但 web.config 设置起作用了。我的目标是 .NET 4.7.2 和 MVC 5.2.7。这是一个讨厌的错误。
我不得不在这个线程上结合其他人的答案。
通过 NuGet 安装 NetStandard.Library 手动编辑 .csproj 文件并添加引用。
删除 Bin 和 Obj 文件夹对我有用。
从 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>
<Reference Include="netstandard" />
添加到 csproj 文件中,但是...仅当您还将 CopyLocal 设置为 true 时才有效。这些都没有任何意义。
我之前遇到过这个问题,并尝试了很多事情为我解决了这个问题:
删除 bin 文件夹(如果存在)
删除隐藏的 .vs 文件夹
确保已安装 4.6.1 定位包
最后的努力:添加对 System.Runtime 的引用(右键单击项目 -> 添加 -> 引用 -> 勾选 System.Runtime 旁边的框),虽然我想我一直想通上面的一个已经解决了它这样做。
此外,如果这是在完整框架上运行的 .net 核心应用程序,我发现您必须在项目的根目录中包含一个 global.json 文件,并将其指向您要用于该项目的 SDK:
{
"sdk": {
"version": "1.0.0-preview2-003121"
}
}
https://i.stack.imgur.com/Ibsi6.png
在 netstandard.dll 属性中将 Copy Enbale 设置为 true。
打开解决方案资源管理器并右键单击 netstandard.dll。将复制本地设置为真。
虽然这是一个旧线程,但我今天遇到了同样的问题,上周我更新了一些 NuGet 包,虽然当我发布到测试服务器时 MVC 网站在我的开发机器上运行良好,但它失败了。
我阅读了许多帖子,但没有一个有效。最后我把本地bin中的DLL和测试服务器中的DLL进行了比较,发现netstandard.dll没有上传,一旦上传网站就可以了,不知道为什么VS2017 web deploy没有发布DLL。
只是要注意一下,以防上述任何方法都不适合您。
那些没有 web.config 文件的人。 Web 应用程序以外的输出类型。使用下面的代码更新项目文件 (.csproj)。
这可能是由于以不正确的方式添加/删除 .netframework 或它可能会以意想不到的方式破坏。
<ItemGroup>
<Reference Include="netstandard" />
</ItemGroup>
输出类型
控制台应用程序
类库
这是 netstandard.dll 存在的地方: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\netstandard.dll 通过这个将 ref 添加到您的项目中。
netstandard2.0
而没有任何问题:weblog.west-wind.com/posts/2019/Feb/19/…(我希望微软已经解释了这一点)
可能与其中之一有关:
安装更新的 SDK。在 .csproj 中检查 Reference Include="netstandard" 检查 Views\Web.config 和 Web.config 中编译标记中的程序集版本。
我在将 .NET Core 1.1 升级到 2.1 时遇到了这种情况。
我按照 here 中的说明进行操作。
尝试删除 .csproj 中的 <RuntimeFrameworkVersion>1.1.1</RuntimeFrameworkVersion>
或 <NetStandardImplicitPackageVersion>
部分。
在部署从 4.6.1 迁移到 4.7.2 的应用程序后,我们开始在生产服务器上收到此错误。
我们注意到那里没有安装 .NET framework 4.7.2。为了解决这个问题,我们做了以下步骤:
从以下位置安装 .NET Framework 4.7.2:https://support.microsoft.com/en-us/help/4054530/microsoft-net-framework-4-7-2-offline-installer-for-windows 重新启动机器在如何找到 .NET 版本?
使用安装在机器上的 .Net Framework 4.7.2 版本再次运行应用程序解决了该问题。
我面临着同样的问题,我按照现在设置应用程序工作正常
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
我在尝试将 .NETStandard 依赖项添加到 .NET4.6.1 库并使用 Mono 4.6.2(Ubuntu 16.04 附带的版本)在 Linux 中编译它时遇到了这个问题。
我今天终于解决了;解决方案需要做这两件事:
将 .csproj 文件中的
您可以在项目中添加到 web.config。
当您将它添加到项目 web.config 时它不起作用,因为它适用于 MVC。
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=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
我在 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 项目解决了这个问题,当您选择此项目时,也会安装 .NET 5.0 运行时和 .NET 3.1 运行时。
https://i.stack.imgur.com/HGbDc.png
安装此项目后,我可以使用最新的 MSBuild 构建我的项目并且没有错误!
我有同样的问题,每隔一段时间就会出现一次,可能是由于切换分支。
使用 4.6.1。 Visual Studio 2019,更清晰...
我的解决方案是手动添加一个新引用,浏览到 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" />
就我而言,我已将 VS 2019 更新到 05/21 的最新版本,但仍然遇到同样的问题。
我解决了
仔细查看错误消息“对象”类型是在未引用的程序集中定义的。您必须添加对程序集的引用 'system.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 打开 .csproj 文件并在
按照 VS 提示重新加载项目,然后重新构建,我没有看到同样的问题。
此问题基于您安装的 Visual Studio 和 Windows 版本,您可以按照以下步骤操作:-
转到命令行窗口,通过以下命令 Install-Package Xamarin.Forms -Version 2.5.1.527436 Rebuild Your Project 将您的 PCL 降级。现在您将能够看到所需的输出
不定期副业成功案例分享
<add assembly="netstandard
并且 httpRuntime 不是 4.7.1 - 这就是答案!谢谢 !!