Dot-Net

在同一解決方案文件中同時具有 .NET Framework 和 .NET Core 項目的 Azure DevOps 中建構 .sln

  • September 26, 2020

在 Azure DevOps Pipelines 中建構一個 .sln 文件的最佳做法是什麼,該文件同時具有面向 .NET Core 和 .NET Framework 的項目?

我曾嘗試對 .sln 文件使用 NuGet 還原任務,但在某些與 .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 restoredotnet build操作,而不是像使用 Visual Studio Build 任務那樣對整個 .sln 文件執行操作。

如何在 Azure DevOps 中建構具有 .NET Core 和 .NET Framework 項目並且還需要還原包的 .sln 文件的最佳做法是什麼?

在同一解決方案文件中同時具有 .NET Framework 和 .NET Core 項目的 Azure DevOps 中建構 .sln

預設情況下,.NET Framework 項目使用packages.config文件作為 NuGet 引用。只有nuget.exe命令行nuget restore才能恢復這些類型的項目。使用項目引用 NuGet 包的 .NET Core 項目PackageReference可以通過dotnet restore. 這意味著dotnet restore無法恢復packages.config基於項目的項目。

所以,為了解決這個問題,我們可以從 packages.config 遷移到 PackageReference或者只在項目中使用 packagereference .netframework,然後我們可以使用任務dotnet restore來恢復.slnAzure DevOps 中的文件。

此外,對於建構,即使dotnet build應該能夠建構許多經典的 .NET Framework 項目,但許多功能可能無法正常工作,因為底層建構任務是在 .NET Framework 上執行的,並且可能表現不同或在 .NET Framework 上完全不受支持。 NET Core 版本的 MSBuild,因此要建構.sln文件,我們建議使用 Visual Studio Build 任務或 MSBuild 任務。

引用自:https://stackoverflow.com/questions/56546839