Зависимость проекта в файле решения позволяет выполнить сборку - PullRequest
0 голосов
/ 10 октября 2018

Этот репозиторий воспроизводит проблему dotnet build, с которой мы сталкиваемся.

У нас есть веб-приложение, ориентированное на netcoreapp2.1.и библиотека классов, предназначенная для netstandard2.0 и net47.

. Веб-приложение предоставляет веб-API, и мы используем NSwag для генерации соответствующего клиента C #.Поэтому процесс сборки должен сначала собрать веб-приложение, а затем библиотеку классов.

Из-за этого необходимого порядка мы определили зависимость проекта в решении: Project Dependency

Однако, хотя он прекрасно собирается в 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 .

1 Ответ

0 голосов
/ 23 октября 2018

На самом деле, еще одно исследование показало, что эта проблема известна и будет исправлена ​​в MSBuild 15.9 .Временное исправление также упоминается в вышеупомянутой теме: поместите файл Directory.Build.props рядом с файлом решения со следующим содержимым:

<?xml version="1.0" encoding="utf-8"?>
<Project>
  <PropertyGroup>
    <!-- Solution build dependencies are not project dependencies. https://github.com/Microsoft/msbuild/issues/3626 -->
    <AddSyntheticProjectReferencesForSolutionDependencies>false</AddSyntheticProjectReferencesForSolutionDependencies>
  </PropertyGroup>
</Project>
...