VS 15.8.2 зламав інструменти побудови - відсутній RuntimeIdentifier


84

Останнє оновлення Windows розірвало весь наш ланцюжок збірки, і я трохи не знаю, що це спричиняє.

У мене є застарілий проект, який є рішенням VS 2017 зі значною кількістю проектів (winform, пара в Інтернеті, лише деякі 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

Відповіді:


138

У певний момент перед спробою побудови потрібно видалити папку obj. Не одна людина показала це для вирішення проблеми.

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


1
Ні. Не це. Я нукую ціле дерево папок - навіть повинен зробити повний git для кожної збірки. Жодної збірки.
TomTom

12
Видалення папки obj у кожному з моїх проектів у рішенні видалило цю помилку для мене.
Адріан Сангвінети

1
Я виїхав до нової папки, все ще та сама проблема, це почало траплятися зараз, після оновлення до 15.9.4, нормальної .net framework csproj. Для мене це відбувається в командному рядку за допомогою msbuild, visualstudio добре працює.
neslekkiM

5
У мене також є та сама помилка з VS 15.9.9. Проблема виникає лише у командному рядку devenv. Не через графічний інтерфейс VS.
Девід

3
у майбутньому, це може статися через перехід до PackageReference і назад, залишаючи залишки. відкрите випуск: github.com/dotnet/project-system/issues/3164
Даніель Дубовський

25

Додайте це: <RuntimeIdentifier>win</RuntimeIdentifier> у файл проекту, наприклад після елемента TargetFrameworkVersion. Переконайтесь, що назва елемента є одниною. RuntimeIdentifiersз іншого боку, використовується в новому форматі csproj


3
Це спрацювало для мене. Я змішую проекти .Net Standard та .Net Framework. Це було потрібно для всіх файлів .csproj .Net Framework, щоб рішення було побудовано з командного рядка.
Рассел Філліпс,

1
Це спрацювало для мене у випадку, коли я переніс проект на використання nuget стилю PackageReference.
RosieC

2
Чому він потім будується у Visual Studio, а з msbuild - у командному рядку ..
Piotr Kula

Я додав множинну версію <RuntimeIdentifiers> win-x64; win-x86 </RuntimeIdentifiers> у файл проекту .NET, і вона спрацювала.
Rugbrød

24

Незважаючи на те, що відповідь @ Señor CMasMas мені допомагала в минулому, зараз я знаходжу (з моменту встановлення .NET Core SDK v2.2 - не знаю, якщо це пов'язано), що мені також потрібно закрити та знову відкрити Visual Studio . Отже, для мене рецепт:

  • Чистий розчин
  • Видалити objпапки
  • Видаліть .vsпапку (необов’язково, якщо з’являються червоні лінії, але все в порядку)
  • Закрийте та знову відкрийте Visual Studio
  • Тоді будуйте

Я перетворив проект на новий формат SDK, створив його і відкотив свої зміни. Тоді я отримав цю project file doesn't list 'win' as a "RuntimeIdentifier"помилку щодо формату csproj legacy. Я видалив усі файли binта objфайли, створені під час відтворення з новим форматом проекту, і він знову почав компілювати.
oleksa

12

Або ви можете просто запустити в кореневому каталозі вашого проекту сценарій у PowerShell, який ви повинні запускати як адміністратор.

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

цей скрипт видалить усі папки obj та bin


Простий та ефективний. Мені просто потрібно було видалити binі obj.... Велике спасибі
Андре Соарес

Дякую ... врятував мене, перекопуючи 89 папок проекту.
Петро

1
Приємно. Як варіант, rm *\obj -Recurse -Forceтакож працює
Суб’єктивна реальність

5

ви повинні зрозуміти, які проекти у вашому рішенні викликають цю помилку. Ви можете знайти це, якщо поглянути на панель помилок. перейдіть до цих проектів і видаліть як папку bin, так і obj. потім відновити. повинно бути добре


2

Я маю подібний випадок. Я намагаюся створити рішення за допомогою msbuild, не встановлюючи Visual Studio 2017, просто встановіть останню версію інструментів збірки vs 2017. Ось мої кроки:

  1. dotnet restore a.sln (у цьому рішенні є деякі проекти .Net Standard Library, інші - це проекти .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

Оновлення nuget.exe з v4.9.4.5839 до v5.4.0.6315 вирішило цю проблему для мене.
blaz

2

У мене була подібна проблема. Моя помилка була

помилка: у файлі проекту "win10" не вказано як "RuntimeIdentifier". Вам слід додати 'win10' до властивості "RuntimeIdentifiers" у файлі проекту, а потім повторно запустити відновлення NuGet.

Ну, виявилося, мені просто довелося змінити цільовий компонент з "Будь-якого процесора" на щось інше (наприклад, x64) ...


1

RuntimeIdentifier має виглядати приблизно так, як описано тут: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog .

Враховуючи, що це, здається, побудова просто знаходити локально, я б порівняв файл .csproj на вашій локальній машині з таким на вашому сервері збірки. Щось мені підказує, вони не однакові.

FWIW, рядок 186 у зазначеному файлі Microsoft.NuGet.targets, виконує завдання ResolveNuGetPackageAssets, і ви можете бачити, як аргумент RuntimeIdentifier передається як властивість NuGetRuntimeIdentifier. Можливо, ви можете простежити це в журналі діагностики робочої збірки, щоб побачити, як воно призначається.

Але враховуючи, що це працює в одному вікні, а не в іншому, я б просто перевірив файли вашого проекту на dbl і переконався, що тег RuntimeIdentifier ідентичний в обох системах.

З повагою,


1

У мене виникла така сама проблема перемикання між ланцюжками побудови vstools (VS2017 / VS2019) - ось що мені це виправлено - груба сила очищена через rimraf

У вашому файлі проекту "win" не вказано як "RuntimeIdentifier". Вам слід додати 'win' до належного типу "RuntimeIdentifiers" у файлі проекту, а потім повторно запустити відновлення NuGet

Видаліть вихідні артефакти посередницької збірки

rimraf *\obj\**


0

Для мене це було так просто, як компіляція програми Windows IoT з x86платформою замість ARM.


0

У моєму випадку це відбувалося у збірці Azure.

Я зміг це вирішити, змусивши побудувати використовувати інструменти Visual Studio 2019.

Я змінив наш файл build.cake так, що кроки MSBuild включали UseToolVersion для VS 2019 наступним чином:

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

0

Єдине, що мені вдалося, це видалити ВСІ файли проекту та завантажити їх знову з контролю версій. Потім проблема зникла.


0

Якщо ви націлюєтесь на Azure Service Fabric або інше 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

Просте відновлення nuget перед викликом MSBuild працювало для мене. У мене є проекти, націлені на .NET Framework 4.7.2 (не SDK-стиль, застарілий стиль), який я переніс із синтаксису package.config.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.