Сбой MSBuild при обновлении решения до .NET 4.7.2 - PullRequest
0 голосов
/ 12 февраля 2019

Я обновляю решение для использования .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 \ target \ Microsoft.NET.TargetFrameworkInference.цели (150, 5): ошибка NETSDK1045: текущий .NET SDK не поддерживает таргетинг на .NET Standard 4.7.2.Либо ориентируйтесь на .NET Standard 2.0 или ниже, либо используйте версию .NET SDK, которая поддерживает .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 работает нормально.

1 Ответ

0 голосов
/ 13 февраля 2019

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

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

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

...