Ошибка MSBuild при обновлении решения до .NET 4.7.2

Я обновляю решение для использования .NET 4.7.2 и столкнулся с проблемой.

Я могу собрать и запустить проект на машине разработчика, но TeamCity не сможет.

На этапе сборки TeamCity я добавил /p:TargetFrameworkVersion:v4.7.2 к шагу MSBuild.

Один из проектов нацелен на netstandard 2.0, и MSBuild выдал мне ошибку, что я должен добавить туда .NET Framework 4.7.2. Я добавил .NET Framework 4.7.2 в качестве цели, но это не дало никакого эффекта. Вот ошибка из журнала сборки:

[NETSdkError] C:\Program Files\dotnet\sdk\2.1.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(150, 5): error NETSDK1045: The current .NET SDK does not support targeting .NET Standard 4.7.2. Either target .NET Standard 2.0 or lower, or use a version of the .NET SDK that supports .NET Standard 4.7.2.

Это странно, так как нет .NET Standard 4.7.2, но я подумал, что это просто опечатка в сообщении об ошибке.

На агенте установлены инструменты MSBuild 2017 и целевой пакет .NET 4.7.2.

Есть идеи, что здесь не так? Может ли быть проблема в дополнительном аргументе MSBuild? Файл проекта для неудачного проекта выглядит следующим образом:

<Project Sdk = "Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net472;netstandard2.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include = "Newtonsoft.Json" Version = "10.0.3" />
    <PackageReference Include = "Autofac" Version = "4.6.1" />
    <PackageReference Include = "System.Configuration.ConfigurationManager" Version = "4.4.1" />
    <PackageReference Include = "System.Net.Http" Version = "4.3.3" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include = "SomeLibrary">
      <HintPath>..\packages\SomeLibrary.1.0.4\lib\net461\SomeLibrary.dll</HintPath>
    </Reference>
    <ProjectReference Include = "..\ProjectName.Core\ProjectName.Core.csproj" />
    <ProjectReference Include = "..\ProjectName.Domain\ProjectName.Domain.csproj" />
    <ProjectReference Include = "..\ProjectName.Web\ProjectName.Web.csproj" />
  </ItemGroup>
</Project>

Когда я пытаюсь запустить MSBuild локально с теми же параметрами - он терпит неудачу, но с совершенно другой ошибкой, что-то о недопустимом синтаксисе и особенностях языка C# 7. Создание решения через Rider работает нормально.

Возможно поможет загрузка и установка какого-нибудь SDK отсюда (а может и перезагрузка).

Uwe Keim 12.02.2019 14:18

@UweKeim, пожалуйста, посмотрите мои правки

chester89 12.02.2019 14:22

@UweKeim .NET Core SDK 2.1.402 уже установлен, поэтому я не думаю, что это проблема.

chester89 12.02.2019 14:22

@CamiloTerevinto только что сделал

chester89 12.02.2019 14:35

Я бы сделал копию папки bin, а потом удалил. Это заставит весь проект перестроиться. Зависимости компилятора всегда полностью перестраиваются при изменении версии сети.

jdweng 12.02.2019 14:46

@jdweng, к сожалению, это не помогло

chester89 12.02.2019 16:03

Вы используете более одного проекта? Другие проекты могут нуждаться в обновлении.

jdweng 12.02.2019 18:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
7
5 857
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если вы используете многоцелевые проекты, используйте /p:TargetFramework=net472.

TargetFrameworkVersion изменит только версию используемой платформы, а не значение TargetFramework или TargetFrameworkMoniker, который используется где-либо еще в сборке. Таким образом, нет целевой платформы .NET Standard с версией 4.7.2, которая вызывает проблемы с вашей сборкой.

Обратите внимание, что установка такого глобального свойства может работать только в том случае, если все проекты в сборке его поддерживают, поэтому будьте осторожны при использовании его в решениях, содержащих несколько проектов, которые могут его поддерживать или не поддерживать.

У меня была эта проблема в течение всего дня, и это решило ее для меня. Спасибо

ben_mj 09.04.2019 11:33

Я получил ту же ошибку, когда установил только фреймворк 4.7.2 на машине с агентом. Вам необходимо установить пакет SDK для разработчиков (NDP472-DevPack.exe) - ссылка на NDP472-DevPack.exe: https://dotnet.microsoft.com/download/dotnet-framework/thank-you/net472-developer-pack-offline-installer

Другие вопросы по теме