解决方案文件中的项目依赖性使构建失败

时间:2018-10-10 07:37:15

标签: c# .net build msbuild dependencies

此存储库再现了我们面临的dotnet build问题。

我们有一个针对netcoreapp2.1的网络应用程序。以及同时面向netstandard2.0net47的类库。

该Web应用程序提供了一个Web API,我们正在使用NSwag来生成相应的C#客户端。 因此,构建过程必须首先构建Web应用程序,然后构建类库。

由于此必需的订单,我们在解决方案中定义了项目依赖关系: 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来编译Web应用程序,尽管我们仅设置了一个项目 强制执行特定的构建顺序。

我们的实际解决方案包含15个以上的项目,因此添加了构建任务 适用于 VSTS Azure DevOps构建管道中的每个项目 不够理想。

我们希望不必在解决方案文件中定义依赖项,但是我们还没有在 .csproj 文件中找到一种可行的方法。

任何提示如何在没有直接参考(我们针对不同框架)的情况下强制执行项目的特定顺序。

我已在GitHub发布了一份副本。

1 个答案:

答案 0 :(得分:2)

实际上,更多研究表明此问题为known,并将在 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>