我正在使用我的类库所基于的.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类库而不会出现此类错误?
答案 0 :(得分:24)
即使使用最新的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,一切都很顺利。
答案 1 :(得分:14)
尝试在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>
答案 2 :(得分:12)
根据此GitHub issue处理类似问题,您必须手动添加对.NET Framework项目中<{1}}包的引用 for now * 。
通过NuGet Console安装它:
NETStandard.Library.NETFramework
几天前,.NET Core / Standard 2.0预览版2发布,如果您更新,则需要以下版本:
Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview1-25305-02 -Pre
或通过NuGet商店(查看显示预发布版本)并搜索Install-Package NETStandard.Library.NETFramework -Version 2.0.0-preview2-25405-01 -Pre
这将解决引用,错误应该消失。
* Joperezr表示微软计划让工具稍后处理。
现在你必须手动添加对这个包的引用,这可能很烦人,但是将来我们正计划为你做这个工具。
答案 3 :(得分:2)
以防有些人像我一样有这个问题
将您的Visual Studio 2017版本更新为&gt; 15.3(检查版本在帮助中 - >从顶部菜单开始),我有版本15.2并看到此错误,我做了我在这里找到的所有内容或github但没有修复我的问题。然后更新了visual studio版本并修复了它。
答案 4 :(得分:0)
如果您正在使用像Jenkins这样的CI的MSBuild,那么请更新构建工具(您可以从https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017再次下载)并确保选中“.NET Core构建工具”。
答案 5 :(得分:0)
在使用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>
答案 6 :(得分:0)
我正在将Visual Studio 2017与C#UWP应用一起使用。我遇到了这个错误,我的很多班级在我的项目中都出现了这个错误。我通过在解决方案资源管理器中右键单击项目的“引用”文件夹并单击“添加引用”来修复它。然后,我选择了弹出窗口底部的“浏览”按钮。
将您带到文件资源管理器,您将在这里找到正确的文件:
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
添加完之后,我所有的错误都消失了。
答案 7 :(得分:0)
当我将项目物理上移动到子文件夹中时,我自己遇到了此异常,导致NuGet包引用(路径提示)被破坏了。将它们修复在csproj文件中后,一切又恢复了正常。
答案 8 :(得分:0)
很高兴听到许多人对Visual Studio的更新解决了他们的问题;但是,值得指出的是,由于错误和其他问题,不再建议尝试使用.NET Framework 4.6.1项目中的.NET Standard 2.0库。您应尽可能使用4.7.2或更高版本。
Microsoft .NET团队的项目经理Immm Landwerth,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 Standard存在几个问题 .NET Framework 4.6.1为这些版本构建的库 项目。对于需要使用此类库的.NET Framework项目, 我们建议您将项目升级到目标.NET Framework 4.7.2或更高版本。
答案 9 :(得分:0)
给出相同错误消息的另一种情况是,如果您的web.release.config文件更改了目标框架的版本。我不知道我们的项目如何以这种状态结束,但是我们进行了一次转换,使我们从4.7.2定位为4.7
import unittest
import sanity
class TestingCap(unittest.TestCase):
def firstone(self):
word = 'apple'
result = sanity.firstname(word)
self.assertEqual(result,'apple')
if __name__ == '__main__':
unittest.main()
删除targetFramework属性(使其与我们的web.config使用的属性相同)解决了该错误