Этот репозиторий воспроизводит проблему dotnet build
, с которой мы сталкиваемся.
У нас есть веб-приложение, ориентированное на netcoreapp2.1
.и библиотека классов, предназначенная для netstandard2.0
и net47
.
. Веб-приложение предоставляет веб-API, и мы используем NSwag для генерации соответствующего клиента C #.Поэтому процесс сборки должен сначала собрать веб-приложение, а затем библиотеку классов.
Из-за этого необходимого порядка мы определили зависимость проекта в решении: 
Однако, хотя он прекрасно собирается в Visual Studio, он не работает в командной строке:
$ dotnet build dotnetBuildIssue.sln
Microsoft (R) Build Engine version 15.8.166+gd4e8d81a88 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 42.36 ms for C:\work\tmp\dotnetBuildIssue\ClassLib\ClassLib.csproj.
Restore completed in 63.56 ms for C:\work\tmp\dotnetBuildIssue\WebApp\WebApp.csproj.
WebApp -> C:\work\tmp\dotnetBuildIssue\WebApp\bin\Debug\netcoreapp2.1\WebApp.dll
C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.app\2.1.1\build\netcoreapp2.1\Microsoft.AspNetCore.App.targets(14,5): error : This version of Microsoft.AspNetCore.App is only compatible with the netcoreapp2.1 target framework. Please target netcoreapp2.1 or choose a version of Microsoft.AspNetCore.App compatible with netstandard2.0. [C:\work\tmp\dotnetBuildIssue\WebApp\WebApp.csproj]
C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.app\2.1.1\build\netcoreapp2.1\Microsoft.AspNetCore.App.targets(14,5): error : This version of Microsoft.AspNetCore.App is only compatible with the netcoreapp2.1 target framework. Please target netcoreapp2.1 or choose a version of Microsoft.AspNetCore.App compatible with net47. [C:\work\tmp\dotnetBuildIssue\WebApp\WebApp.csproj]
Build FAILED.
Мне кажется, dotnet использует библиотеку классов TargetFramework net47
дляскомпилируйте веб-приложение, хотя мы устанавливаем зависимость проекта только для обеспечения определенного порядка сборки.
Наши реальные решения содержат более 15 проектов, поэтому добавление задачи сборки для каждого проекта в VSTS конвейер сборки Azure DevOps меньше оптимального.
Мы бы предпочли не определять зависимость в файле решения, но мы не нашли рабочего способа сделать это в .csproj file.
Любой намек на то, как обеспечить соблюдение определенного порядка проектов без прямой ссылки (мы нацелены на разныеFrameworks) можно только приветствовать.
Я опубликовал репродукцию на GitHub .