我正在使用我的类库所基于的.NET Standard 2.0预览版。
在使用一些NuGet包时遇到问题,特别是关于存档提取,我决定将我的.NET Core 2.0控制台项目迁移回.NET Framework 4.6.1。
根据不同的来源,.NET Framework 4.6.1应该实现.NET Standard 2.0规范。尤其是dotnet/standard GitHub Repo。
遗憾的是,迁移到.NET Framework导致所有.NET Framework Console项目出现以下错误:
错误CS0012类型“对象”在未引用的程序集中定义。您必须添加对程序集'netstandard,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = cc7b13ffcd2ddd51'的引用。
哪里Object
可以是任何东西:Enum
,Task
,...
如何在不出现此类错误的情况下使用.NET Framework(4.6.1)引用.NET Standard 2.0类库?
即使在使用最新的2.0和VS 15.3之后我也遇到了这个问题。但是,我认为我的问题不同了。从Core 1.1升级到2.0后,出于某种原因,我的.web的.csproj有<RuntimeFrameworkVersion>1.1.2</RuntimeFrameworkVersion>
。这阻止了该项目瞄准正确的2.0版本。
我的类库(.Layer)项目有<NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>
。
我删除了他们两个,我的项目最终开始使用2.0,一切都很顺利。
尝试在web.config中添加对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>
</system.web>
根据这个处理类似问题的GitHub issue,您必须在.NET Framework项目中手动添加对NETStandard.Library.NETFramework
包的引用。
通过NuGet控制台安装它:
Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre
几天前,.NET Core / Standard 2.0预览版2发布了,如果您更新,则需要以下版本:
Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre
或通过NuGet商店(查看显示预发布版本)并搜索NETStandard.Library.NETFramework
这将解析引用,错误应该消失。
* Joperezr表示微软计划让一个工具稍后处理。
现在你必须手动添加对这个包的引用,这可能很烦人,但是将来我们正计划为你做这个工具。
以防有些人像我一样有这个问题
将您的Visual Studio 2017版本更新为> 15.3(检查版本的帮助 - >从顶部菜单开始),我有版本15.2并看到此错误,我做了我在这里找到的所有内容或github但没有解决我的问题。然后更新了visual studio版本并修复了它。
我正在使用Visual Studio 2017和C#UWP应用程序。我有这个错误,我的很多课程都在我的项目中出现了这个错误。我通过在解决方案资源管理器中右键单击项目的References文件夹并单击“添加引用”来修复它。然后我选择了弹出窗口底部的“浏览”按钮。
它将您带到文件资源管理器,您将在此处找到正确的文件:
C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ netstandard.dll或者从.NET Core 2.0 SDK中可以找到它C: \ Program Files \ dotnet \ sdk \ 2.0.0 \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ lib \ netstandard.dll
一旦我添加它,我的所有错误都消失了。
如果您正在使用像Jenkins这样的CI的MSBuild,那么请更新构建工具(您可以从https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017再次下载)并确保选中“.NET Core构建工具”。
当我使用TestServer
来测试我的MVC视图时,我在测试项目中遇到了这个问题。
测试项目,Web项目和相关库都是netcoreapp2.0
。
将vs2017升级到15.5不起作用,并使用以下建议的修复程序编辑我的测试.csproj不起作用:
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<ItemGroup><Reference Include="netstandard" /></ItemGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
然而,根据https://github.com/aspnet/Razor/issues/1212#issuecomment-297885722,这有效:
<Target Name="CopyDepsFiles" AfterTargets="Build" Condition="'$(TargetFramework)'!=''">
<ItemGroup>
<DepsFilePaths Include="$([System.IO.Path]::ChangeExtension('%(_ResolvedProjectReferencePaths.FullPath)', '.deps.json'))" />
</ItemGroup>
<Copy SourceFiles="%(DepsFilePaths.FullPath)" DestinationFolder="$(OutputPath)" Condition="Exists('%(DepsFilePaths.FullPath)')" />
</Target>
在将项目物理移动到子文件夹时,我自己有这个例外,导致NuGet包引用(路径提示)被破坏。将它们修复到csproj文件后,一切都恢复正常了。
很高兴听到很多人对Visual Studio的更新解决了他们的问题;但是,值得指出的是,由于存在错误和其他问题,不再建议尝试从.NET Framework 4.6.1项目中使用.NET Standard 2.0库。在可能的情况下,您应该使用4.7.2或更高版本。
Immo Landwerth,微软.NET团队项目经理,tweeted:
对不起,但我们搞砸了。我们尝试使.NET Framework 4.6.1追溯性地实现.NET Standard 2.0。这是一个错误,因为我们没有时间机器,并且有一堆错误。
如果您想从.NET Framework使用.NET Standard 1.5+,我建议使用4.7.2。
.NET Standard comparability matrix已更新为4.6.1的脚注,内容如下:
此处列出的版本表示NuGet用于确定给定.NET标准库是否适用的规则。虽然NuGet认为.NET Framework 4.6.1支持.NET Standard 1.5到2.0,但是使用.NET Framework 4.6.1项目中为这些版本构建的.NET标准库存在一些问题。对于需要使用此类库的.NET Framework项目,我们建议您将项目升级到.NET Framework 4.7.2或更高版本。