此存储库再现了我们面临的dotnet build
问题。
我们有一个针对netcoreapp2.1
的网络应用程序。以及同时面向netstandard2.0
和net47
的类库。
该Web应用程序提供了一个Web API,我们正在使用NSwag来生成相应的C#客户端。 因此,构建过程必须首先构建Web应用程序,然后构建类库。
但是,尽管它可以在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发布了一份副本。
答案 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>