137

上次的 Windows 更新破坏了我们的整个构建链,我不知道是什么原因造成的。

我有一个遗留项目,它是一个 VS 2017 dolution,包含大量项目(winform、基于 web 的情侣、仅一些 Webapi)。

当地的事情完美无缺。我可以建造它们。

在服务器上,proejct已经开始失败,错误是:

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>

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

4

21 回答 21

241

在尝试构建之前的某个时间点,您需要删除 obj 文件夹。不止一个人展示了这个来解决问题。

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

于 2018-09-06T21:48:26.657 回答
51

尽管@Señor CMasMas 的回答过去对我有所帮助,但我现在发现(因为安装了 .NET Core SDK v2.2 - 我不知道这是否相关)我还需要关闭并重新打开 Visual Studio。所以对我来说,食谱是:

  • 清洁溶液
  • 删除obj文件夹
  • 删除.vs文件夹(可选,如果你得到红线但它构建正常)
  • 关闭并重新打开 Visual Studio
  • 然后构建
于 2019-03-06T02:40:17.143 回答
42

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

于 2019-03-28T20:41:53.753 回答
18

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

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

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

于 2019-09-24T12:34:40.597 回答
9

我在 Vs 2019 (16.8.6) 中遇到了同样的错误,以下步骤解决了我的问题。

  1. 关闭 Visual Studio(可能保留其他 Visual Studio 实例)
  2. 删除解决方案中所有项目中的所有binobj文件夹
  3. 重新打开解决方案并构建

请注意,如果 bin 文件夹存在,则仅删除 obj 文件夹不起作用,您还需要删除 bin 文件夹。

于 2021-02-24T19:41:56.430 回答
5

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

错误:您的项目文件未将“win10”列为“运行时标识符”。您应该将“win10”添加到项目文件中的“RuntimeIdentifiers”属性中,然后重新运行 NuGet 还原。

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

于 2019-10-20T10:37:07.247 回答
5

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

于 2020-02-26T10:47:40.830 回答
4

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

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

您的项目文件未将“win”列为“RuntimeIdentifier”。您应该将“win”添加到项目文件中的“RuntimeIdentifiers”属性中,然后重新运行 NuGet 还原。

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

  1. 删除 obj 和 bin 文件夹
  2. nuget.exe 恢复 a.sln
  3. 调用 msbuild.exe
于 2019-06-05T12:30:08.490 回答
3

我在切换 vstools 构建链(VS2017/VS2019)时遇到了同样的问题 - 这是为我解决的问题 - 通过蛮力清理rimraf

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

删除中间构建输出工件

rimraf *\obj\**

于 2020-05-14T22:05:16.747 回答
1

The RuntimeIdentifier should look something more like what's described here: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog.

Given this appears to build just find locally, I'd diff the .csproj on your local machine against the one on your build server. Something tells me, they are not identical.

FWIW, Line 186 in the noted Microsoft.NuGet.targets file, is running the ResolveNuGetPackageAssets task, and you can see the RuntimeIdentifier argument being passed as the NuGetRuntimeIdentifier property. You could probably backtrace that in your working build's diagnostic log to see how it's being assigned.

But given this works on one box, and not on another, I'd just dbl check your project files and verify that the RuntimeIdentifier tag identical on both systems.

Sincerely,

于 2018-09-07T05:06:52.543 回答
1

通过运行手动恢复包时,在使用 packageReference 的项目中出现此问题

NuGet.exe restore my.sln

作为 TeamCity 构建的一部分(因此可能与 nf313743 的答案https://stackoverflow.com/a/60951212/128384相关),然后使用 msbuild 构建项目。当 msbuild 开始处理 PackageReference 时,这将导致以下错误:

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

删除 obj 目录等在这里不起作用,因为它们是按restore步骤添加的;添加一个 RuntimeIdentifier 可能,但是在 VS2017 命令行上构建完全相同的工作正常,所以很明显不同之处在于 TeamCity 设置环境的方式。

罪魁祸首可以在第一次调用的输出中找到:

NuGet.exe restore my.sln -NonInteractive
MSBuild auto-detection: using msbuild version '16.10.2.30804'
from 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\bin'.

它使用来自 VS2019 安装的 msbuild,而该项目是由 VS2017 构建的,因此在混合它们的某个地方存在不兼容,这并不意外。无论如何,关键可能是 TeamCity 没有像 VS2017 命令行那样设置完整的环境,NuGet 文档说

By default the MSBuild in your path is picked,
otherwise it defaults to the highest installed version of MSBuild.

所以这就是它使用 VS2019 的原因。解决方案是手动传递-MsBuildPath给 NuGet 并将其设置为与 teamCity 中选定的构建工具相对应的内容,在这种情况下:

NuGet.exe -msBuildPath "%MSBuildTools15.0_x86_Path%" restore my.sln

(事实证明,teamCity 本身在其自己的 NuGet 步骤中也受到此困扰:如何为 TeamCity NuGet 安装程序设置 MSBuild 版本?

于 2021-07-22T15:27:08.167 回答
0

唯一对我有用的是删除所有项目文件并从版本控制再次下载它们。然后问题就消失了。

于 2019-11-27T13:12:34.307 回答
0

如果您的目标是 Azure Service Fabric 或其他 64 位环境,请检查您在 CSPROJ 文件中定义的所有配置<PlatformTarget>x64</PlatformTarget>是否一致。在我的情况下,它在本地构建得很好,但在 CI 服务器上失败了,因为许多配置之一具有<PlatformTarget>AnyCPU</PlatformTarget>.

于 2019-12-05T18:22:48.217 回答
0

在调用 MSBuild 之前进行简单的 nuget 还原对我有用。我有针对 .NET Framework 4.7.2(不是 SDK 样式,旧样式)的项目,这些项目是从 packages.config 语法迁移而来的。

于 2020-11-03T22:23:55.207 回答
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 之前,这是在构建步骤中隐式完成的。

于 2020-03-31T13:02:48.950 回答
0

我在添加到 VS2015 和 VS2019 解决方案中的 MSBUILD 项目中遇到了这个问题,该项目是用 VS2010 编译的。我只是将它从解决方案中排除并使用 VS2010 编译它,包括将 .DLL 文件包含到与 VS2015 和 VS2019 一起使用的其他项目中。

于 2021-12-03T03:23:36.563 回答
0

对我来说,这就像使用x86平台而不是ARM.

于 2018-12-17T20:27:51.200 回答
0

就我而言,这发生在 Azure 版本上。

我能够通过强制构建使用 Visual Studio 2019 工具来解决它。

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

     MSBuild(_solutionFile, settings => settings.SetConfiguration(_configuration)
         .UseToolVersion(MSBuildToolVersion.VS2019));
于 2019-08-30T14:21:36.003 回答
0

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

于 2020-04-01T22:34:56.910 回答
0

在我升级到 VS 到 15.9.27 后,我遇到了一个单元测试项目无法编译的问题,并且删除 obj 文件夹的解决方案对我有用

于 2020-09-25T16:14:43.657 回答
0

To projects mult-target fmk 将此添加到您的项目文件中,例如:

<PropertyGroup>
  <RuntimeIdentifier>ubuntu.16.04-x64</RuntimeIdentifier>
</PropertyGroup>

或者

<PropertyGroup>
  <RuntimeIdentifier>win</RuntimeIdentifier>
</PropertyGroup>
于 2021-12-08T21:12:05.197 回答