在Azure DevOps中构建既包含.NET Framework项目又包含.NET Core项目的.sln文件。

11
在Azure DevOps Pipelines中,如何构建同时针对.NET Core和.NET Framework项目的.sln文件是最佳实践?
我尝试在.sln文件上使用NuGet restore任务,但它会在一些不兼容.NET Core 2.1的包上出错。它还在运行构建时在任务描述中说明了这一点:
还原、打包或推送NuGet包,或者运行NuGet命令。它支持NuGet.org和身份验证的馈送(如Azure Artifacts和MyGet)。它使用NuGet.exe并与.NET Framework应用程序配合工作。对于.NET Core和.NET Standard应用程序,请使用.NET Core任务。
如果我使用.NET Core任务,我只能在特定的.csproj文件上执行dotnet restore和dotnet build,而不能像使用Visual Studio Build任务那样在整个.sln文件上执行。
在Azure DevOps中,如何构建一个同时有.NET Core和.NET Framework项目且需要还原包的.sln文件是最佳实践?
1个回答

11
在Azure DevOps中构建同时包含.NET Framework和.NET Core项目的.sln文件。
默认情况下,.NET Framework项目使用packages.config文件进行NuGet引用。只有命令行nuget restore可以还原这些类型的项目。使用PackageReference项引用NuGet包的.NET Core项目可以直接通过dotnet restore使用。这意味着dotnet restore无法还原基于packages.config的项目。
因此,为了解决这个问题,我们可以从packages.config迁移到PackageReference或者在.netframework项目中使用packagereference,然后我们就可以使用任务dotnet restore来还原Azure DevOps中的.sln文件。
此外,对于构建,即使dotnet build应该能够构建许多经典的.NET Framework项目,但由于底层构建任务是用于在.NET Framework上运行的,因此许多功能可能无法正常工作,或者在MSBuild的.NET Core版本上表现不同或完全不受支持,因此要构建.sln文件,我们建议使用Visual Studio Build任务或MSBuild任务。

1
如果这个解决方案不能解决你的问题,那么你可能像我一样被误导了。我有一个混合解决方案,我尝试了这个修复方法,但没有成功。经过大量研究,我发现你可能需要使用更新版本的NuGet,在我的情况下,从4.1.1到4.4.1可以解决问题。我的错误是:Package X 2.1.0与netcoreapp2.1 (.NETCoreApp,Version=v2.1)不兼容。Package X 2.1.0支持:netstandard2.0 (.NETStandard,Version=v2.0)。 - Norcino
1
@Norcino,我遇到了相同的Nuget版本问题。在“Nuget恢复”步骤之前添加“Nuget工具安装程序”步骤解决了该问题。 - tgriffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接