VS 15.8.2 broke build tools - missing RuntimeIdentifier

Visual Studio-2017Visual Studio-2017-Build-Tools

Visual Studio-2017 Problem Overview


The last windows update has broken our whole build chain and I am a little at a loss at what causes it.

I have a legacy project that is a VS 2017 dolution with a significant number of projects (winform, couple web based, some Webapi only).

Locally things work perfectly. I can just build them.

On the server, the proejct has started to fail, and the error is:

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'.

I have added

<RuntimeIdentifiers>win</RuntimeIdentifiers>

To a number of projects. No change. I am at a loss, because the error message does not even tell me which project.

Visual Studio-2017 Solutions


Solution 1 - Visual Studio-2017

At some point before attempting to build, you need to delete the obj folder. More than one person showed this to solve the problem.

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

Solution 2 - Visual Studio-2017

Although @Señor CMasMas's answer has helped me in the past, I'm now finding (since installing the .NET Core SDK v2.2 - I don't know if that's related though) that I also need to close and reopen Visual Studio. So for me the recipe is:

  • Clean solution
  • Delete obj folders
  • Delete the .vs folder (optional, if you get red lines but it builds OK)
  • Close and reopen Visual Studio
  • Then build

Solution 3 - Visual Studio-2017

Add this: <RuntimeIdentifier>win</RuntimeIdentifier> to your project file, for example after element TargetFrameworkVersion. Make sure the element name is singular. RuntimeIdentifiers on the other hand is used in the new csproj format

Solution 4 - Visual Studio-2017

Or you just can run in the root directory of your project the script in PowerShell that you should run as administrator.

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

this script will delete all obj and bin folders

Solution 5 - Visual Studio-2017

I have come across same error in Vs 2019 (16.8.6), following steps resolved my problem.

  1. Close visual studio (other visual studio instances may remain)
  2. Delete all bin and obj folders in all projects in the solution
  3. Reopen solution and Build

Note that if bin folders exist, deleting only obj folders doesn't work, you need to delete bin folders too.

Solution 6 - Visual Studio-2017

I had a similar problem. My error was

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

Well, it turned out I just had to change by build target from "Any CPU" to something else (x64 for example)...

Solution 7 - Visual Studio-2017

you got to figure out which projects in your solution trigger this error. you can find this if you look at the error panel. go to that projects locations and delete both the bin and the obj folders. then rebuild. should be alright

Solution 8 - Visual Studio-2017

I have a similar case. I try to build a solution via msbuild without installing Visual Studio 2017, just install the latest version of vs 2017 build tools. Here are my steps:

  1. dotnet restore a.sln (There are some .Net Standard Library project in this solution, the others are .NET 4.7.2 projects).
  2. call msbuild.exe to build this solution.
  3. I got the error of "missing RuntimeIdentifier".

> 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.

It seems an issue in the old version of Nuget. Please refer here. Finally, I resolved it via restore packages with the latest Nuget (v5.0.2). the steps:

  1. Delete obj and bin folders
  2. nuget.exe restore a.sln
  3. call msbuild.exe

Solution 9 - Visual Studio-2017

I had this same issue toggling across vstools build chains (VS2017/VS2019) - here is what fixed it for me - brute force clean via rimraf

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

Remove Intermediary Build Output Artifacts

rimraf *\obj\**

Solution 10 - Visual Studio-2017

Had this problem in projects using packageReference when manually restoring packages by running

NuGet.exe restore my.sln

as part of a TeamCity build (so might be related nf313743's answer https://stackoverflow.com/a/60951212/128384) and then building projects using msbuild. This would result in the following error when msbuild begins dealing with the 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.

Deleting obj directories etc doesn't work here because they get added by the restore step; adding a RuntimeIdentifier might, but building the exact same on a VS2017 commandline works fine so clearly the difference is in how TeamCity sets up the environment.

The culprit could be found in the output of the first call:

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'.

it uses msbuild from the VS2019 installation whereas the project is being built by VS2017, so somewhere in mixing those there is an incompatibility which is not unexpected. Anyway, the key is likely that TeamCity doesn't setup a complete environment like the VS2017 commandline does and the NuGet documentation says

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

so that's why it uses the VS2019 one. Solution is to manually pass -MsBuildPath to NuGet and set it to what corresponds to the selected buildtools in teamCity, in this case:

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

(and it turns out teamCity itself is also plagued by this in its own NuGet step: https://stackoverflow.com/questions/44522321/how-to-set-the-msbuild-verision-for-teamcity-nuget-installer)

Solution 11 - Visual Studio-2017

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,

Solution 12 - Visual Studio-2017

So I was seeing the same error message as this on our on premises DevOps build server, but it built fine locally in Visual Studio as well as via the msbuild on the command line.

I checked and I DID have the defined in my project file and clearing out the obj and bin folders on the server did NOT fix it for me.

Our issue was we had the tag showing up MULTIPLE times in the build section,(probably from a bad merge at some point in the past). After removing the duplicate tags, DevOps successfully built the project.

I was googling for hours and never stumbled on this being the cause of the issue for anyone else. Hopefully this saves someone else some time in the future if they have the same problem.

Solution 13 - Visual Studio-2017

For me, it was as simple as compiling a Windows IoT App with x86 platform instead of ARM.

Solution 14 - Visual Studio-2017

In my case, this was happening on an Azure build.

I was able to resolve it by forcing the build to use Visual Studio 2019 tools.

I modified our build.cake file so that the MSBuild steps included the UseToolVersion for VS 2019 like this:

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

Solution 15 - Visual Studio-2017

The only thing that worked for me was to delete ALL project files and download them again from the version control. Then the problem disappeared.

Solution 16 - Visual Studio-2017

If you are targeting Azure Service Fabric or other 64-bit environment, check that you have a consistent <PlatformTarget>x64</PlatformTarget> in all configurations defined in the CSPROJ file. In my case it built just fine locally but failed on the CI server because one of the many configurations had <PlatformTarget>AnyCPU</PlatformTarget>.

Solution 17 - Visual Studio-2017

I was receiving the same error as the original poster, with 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

My projects are .net Framework v4.6.2. The projects build fine locally using VS 2017, but failed when building on TeamCity Enterprise 10.0.5. I had recently converted my projects from .package to PackageReference - this causing the build to fail.

My solution was to add a new build step to explictly restore the solution's nuget packages before building the solution. It seems that before converting the projects to PackageReference this was being done on the build step implicitly.

Solution 18 - Visual Studio-2017

I always get this error in the Azure pipeline. So far I have noticed the following fixed for me in various occasions:

  1. do not commit the .suo file - if so, delete and recommit
  2. do not commit the bin or obj folders - if so, delete and recommit
  3. if there is a new project added, set the project dependency on the solution properties - save and commit the .sln file

Solution 19 - Visual Studio-2017

I had same issue with one of the unit test project failing to compile after I upgraded to VS to 15.9.27 and the solution to delete the obj folder worked for me

Solution 20 - Visual Studio-2017

A simple nuget restore before calling MSBuild worked for me. I have projects targeting .NET Framework 4.7.2 (not SDK Style, legacy style) which I migrated from packages.config syntax.

Solution 21 - Visual Studio-2017

I experienced this issue with a MSBUILD project that I've added into a solution of VS2015 and VS2019, that project was compiled with VS2010. I just excluded it from solution and compiled it with VS2010, including the .DLL file into other projects that work with VS2015 and VS2019.

Solution 22 - Visual Studio-2017

To projects mult-target fmk Add this to your project file, for example:

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

or

<PropertyGroup>
  <RuntimeIdentifier>win</RuntimeIdentifier>
</PropertyGroup>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTomTomView Question on Stackoverflow
Solution 1 - Visual Studio-2017Señor CMasMasView Answer on Stackoverflow
Solution 2 - Visual Studio-2017OutstandingBillView Answer on Stackoverflow
Solution 3 - Visual Studio-2017BahaaView Answer on Stackoverflow
Solution 4 - Visual Studio-2017llotallView Answer on Stackoverflow
Solution 5 - Visual Studio-2017ozanmutView Answer on Stackoverflow
Solution 6 - Visual Studio-2017Simon MourierView Answer on Stackoverflow
Solution 7 - Visual Studio-2017evaView Answer on Stackoverflow
Solution 8 - Visual Studio-2017Icewindq LiuView Answer on Stackoverflow
Solution 9 - Visual Studio-2017SliverNinja - MSFTView Answer on Stackoverflow
Solution 10 - Visual Studio-2017stijnView Answer on Stackoverflow
Solution 11 - Visual Studio-2017Ed DoreView Answer on Stackoverflow
Solution 12 - Visual Studio-2017NeweyView Answer on Stackoverflow
Solution 13 - Visual Studio-2017Dane BouchieView Answer on Stackoverflow
Solution 14 - Visual Studio-2017AvalanchisView Answer on Stackoverflow
Solution 15 - Visual Studio-2017Martin DimitrovView Answer on Stackoverflow
Solution 16 - Visual Studio-2017Ian MercerView Answer on Stackoverflow
Solution 17 - Visual Studio-2017nf313743View Answer on Stackoverflow
Solution 18 - Visual Studio-2017SubhaView Answer on Stackoverflow
Solution 19 - Visual Studio-2017user76713View Answer on Stackoverflow
Solution 20 - Visual Studio-2017NikhilView Answer on Stackoverflow
Solution 21 - Visual Studio-2017Ivan SilkinView Answer on Stackoverflow
Solution 22 - Visual Studio-2017Lucio PelinsonView Answer on Stackoverflow