VS 15.8.2破坏了构建工具-缺少RuntimeIdentifier


79

Windows的最新更新中断了我们的整个构建链,而导致它的原因我有点不知所措。

我有一个遗留项目,它是VS 2017解决方案,其中包含大量项目(winform,基于夫妇的Web,仅某些Webapi)。

在本地,一切工作正常。我可以建立它们。

在服务器上,该过程已开始失败,错误是:

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\NuGet\15.0\Microsoft.NuGet.targets(186,5): Error : Your project file doesn't list 'win' as a "RuntimeIdentifier". You should add 'win' to the "RuntimeIdentifiers" property in your project file and then re-run NuGet restore.

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\NuGet\15.0\Microsoft.NuGet.targets(186,5): Error : Your project file doesn't list 'win' as a "RuntimeIdentifier". You should add 'win' to the "RuntimeIdentifiers" property in your project file and then re-run NuGet restore.

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\NuGet\15.0\Microsoft.NuGet.targets(186,5): Error : Your project file doesn't list 'win' as a "RuntimeIdentifier". You should add 'win' to the "RuntimeIdentifiers" property in your project file and then re-run NuGet restore.

Process 'msbuild.exe' exited with code '1'.

我已经添加了

<RuntimeIdentifiers>win</RuntimeIdentifiers>

到了多个项目。没变。我很茫然,因为错误消息甚至没有告诉我哪个项目。


相同的问题,相同的旧项目,相同的VS版本。
JohnKoz

TomTom-您解决了吗?我现在有同样的问题。
Uri Y

似乎消失了。记住我们现在是15.8.6 ...
TomTom

Answers:


127

在尝试构建之前的某个时候,您需要删除obj文件夹。有一个以上的人表示可以解决此问题。

https://developercommunity.visualstudio.com/content/problem/312180/projects-fail-to-build-in-1580-due-to-errors-from.html


1
不。不是。我核对整个文件夹树-甚至在每次构建时都必须制作完整的git。没有构建。
TomTom

11
在解决方案中删除我每个项目中的obj文件夹,对我来说都消除了此错误。
Adrian Sanguineti

1
我签出到一个新文件夹,仍然是同样的问题,在升级到15.9.4(普通.net框架csproj)后,现在开始发生这种情况。对我来说,这发生在使用msbuild的命令行中,visualstudio构建良好。
neslekkiM

5
我也有与VS 15.9.9相同的错误。该问题仅在devenv命令行中出现。不通过VS GUI。
大卫,

3
作为将来的参考,可能会由于移至PackageReference并返回而留下残留物而发生。开放问题: github.com/dotnet/project-system/issues/3164
Daniel Dubovski

24

尽管@SeñorCMasMas的回答过去对我有所帮助,但我现在发现(由于安装了.NET Core SDK v2.2-如果不相关,则不知道),我还需要关闭并重新打开Visual Studio。。所以对我来说,配方是:

  • 清洁溶液
  • 删除 obj
  • 删除资料.vs(可选,如果出现红线,则​​显示正确)
  • 关闭并重新打开Visual Studio
  • 然后建立

我已经将项目转换为新的SDK格式,对其进行了构建并回滚了所做的更改。然后我project file doesn't list 'win' as a "RuntimeIdentifier"对于csproj旧式格式有此错误。我删除了在使用新项目格式播放时创建的所有文件binobj文件,并开始重新编译。
oleksa

24

将此添加<RuntimeIdentifier>win</RuntimeIdentifier> 到您的项目文件中,例如在element之后TargetFrameworkVersion。确保元素名称为单数。RuntimeIdentifiers另一方面以新的csproj格式使用


3
这对我有用。我正在混合.Net Standard和.Net Framework项目。这是所有.Net Framework .csproj文件所必需的,以便从命令行构建解决方案。
罗素·菲利普斯

1
在我已将项目迁移为使用PackageReference样式nuget的情况下,这对我有用。
RosieC

1
为什么然后在Visual Studio中以及从命令行的msbuild中构建它,却又突然中断了?
Piotr Kula

11

或者,您仅可以在项目的根目录中运行应以管理员身份运行的PowerShell中的脚本。

Get-ChildItem .\ -include bin,obj -Recurse | foreach { remove-item $_.fullname -Force -Recurse }

该脚本将删除所有obj和bin文件夹


简单有效。我只需要删除binobj....非常感谢
Andre Soares

谢谢...让我免于浏览89个项目文件夹。
彼得

1
真好 另外,rm *\obj -Recurse -Force也可以使用
主观现实

5

您必须弄清楚解决方案中的哪些项目会触发此错误。如果您查看错误面板,则可以找到此内容。转到该项目位置,然后删除bin和obj文件夹。然后重建。应该没事


2

我有类似的情况。我尝试通过msbuild构建解决方案而不安装Visual Studio 2017,仅安装vs 2017构建工具的最新版本。这是我的步骤:

  1. dotnet restore a.sln(此解决方案中有一些.Net标准库项目,其他是.NET 4.7.2项目)。
  2. 调用msbuild.exe生成此解决方案。
  3. 我收到“缺少RuntimeIdentifier”的错误。

您的项目文件没有将“ win”列为“ RuntimeIdentifier”。您应该在项目文件的“ RuntimeIdentifiers”属性中添加“ win”,然后重新运行NuGet恢复。

在旧版本的Nuget中,这似乎是一个问题。请参考这里。最后,我通过使用最新的Nuget(v5.0.2)的还原包解决了该问题。步骤:

  1. 删除obj和bin文件夹
  2. nuget.exe恢复a.sln
  3. 调用msbuild.exe

nuget.exe从v4.9.4.5839升级到v5.4.0.6315为我解决了这个问题。
blaz

2

我有一个类似的问题。我的错误是

错误:您的项目文件未将“ win10”列为“ RuntimeIdentifier”。您应该在项目文件的“ RuntimeIdentifiers”属性中添加“ win10”,然后重新运行NuGet恢复。

好吧,事实证明,我只需要按构建目标将“任何CPU”更改为其他内容(例如x64)...


1

RuntimeIdentifier应该看起来更像这里描述的内容:https ://docs.microsoft.com/en-us/dotnet/core/rid-catalog 。

鉴于这似乎只是在本地查找而已,因此我将本地计算机上的.csproj与构建服务器上的.csproj进行比较。有人告诉我,它们并不相同。

FWIW,著名的Microsoft.NuGet.targets文件中的第186行,正在运行ResolveNuGetPackageAssets任务,您可以看到RuntimeIdentifier参数作为NuGetRuntimeIdentifier属性传递。您可能可以在工作版本的诊断日志中回溯该行,以查看其分配方式。

但是,鉴于这在一个框上有效,而在另一个框上则无效,所以我只是dbl检查您的项目文件,并验证两个系统上的RuntimeIdentifier标记是否相同。

真诚的


1

我在切换vstools构建链(VS2017 / VS2019)时遇到了相同的问题-这是为我修复的问题-通过暴力破解 rimraf

您的项目文件没有将“ win”列为“ RuntimeIdentifier”。您应该在项目文件的“ RuntimeIdentifiers”属性中添加“ win”,然后重新运行NuGet restore。

删除中介构建输出工件

rimraf *\obj\**



0

就我而言,这是在Azure构建上发生的。

我可以通过强制构建使用Visual Studio 2019工具来解决此问题。

我修改了build.cake文件,以便MSBuild步骤包括适用于VS 2019的UseToolVersion,如下所示:

     MSBuild(_solutionFile, settings => settings.SetConfiguration(_configuration)
         .UseToolVersion(MSBuildToolVersion.VS2019));


0

如果你的目标Azure的服务织物或其他64位环境中,检查是否有一致的<PlatformTarget>x64</PlatformTarget>所有的的csproj文件中定义的配置。就我而言,它在本地构建得很好,但是在CI服务器上失败了,因为其中许多配置之一<PlatformTarget>AnyCPU</PlatformTarget>


0

我使用Msbuild v15.9.21收到了与原始海报相同的错误

Your project file doesn't list 'win' as a "RuntimeIdentifier". You should add 'win' to the "RuntimeIdentifiers" property in your project file and then re-run NuGet restore

我的项目是.net Framework v4.6.2。这些项目使用VS 2017在本地构建良好,但在TeamCity Enterprise 10.0.5上构建时失败。我最近将项目从.package转换为PackageReference-这导致构建失败。

我的解决方案是在构建解决方案之前添加一个新的构建步骤,以明确还原该解决方案的nuget软件包。在将项目转换为PackageReference之前,这似乎是在构建步骤上隐式完成的。


0

我总是在Azure管道中收到此错误。到目前为止,我在各种情况下都注意到以下问题:1.不要提交.suo文件-如果是,则删除并重新提交2.不要提交bin或obj文件夹-如果是,则删除并重新提交3.如果添加了一个新项目,在解决方案属性上设置项目依赖项-保存并提交.sln文件


0

升级到VS至15.9.27后,单元测试项目之一编译失败,我遇到了同样的问题,删除obj文件夹的解决方案对我有用


0

在调用MSBuild之前,一个简单的nuget恢复对我有用。我有针对.NET Framework 4.7.2(不是SDK样式,传统样式)的项目,这些项目是从packages.config语法迁移而来的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.