【问题标题】:Building .sln in Azure DevOps that has both .NET Framework and .NET Core projects in the same solution file在同一解决方案文件中同时具有 .NET Framework 和 .NET Core 项目的 Azure DevOps 中构建 .sln
【发布时间】:2019-10-26 01:28:07
【问题描述】:

在 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 构建任务那样对整个 .sln 文件执行操作。

关于如何在包含 .NET Core 和 .NET Framework 项目并且还需要恢复包的 Azure DevOps 中构建 .sln 文件的最佳做法是什么?

【问题讨论】:

    标签: .net .net-core azure-devops


    【解决方案1】:

    在同一解决方案文件中同时包含 .NET Framework 和 .NET Core 项目的 Azure DevOps 中构建 .sln

    默认情况下,.NET Framework 项目使用 packages.config 文件作为 NuGet 引用。只有nuget.exe 命令行nuget restore 可以恢复这些类型的项目。使用PackageReference 项引用 NuGet 包的 .NET Core 项目可以通过dotnet restore 直接使用。这意味着dotnet restore 无法恢复基于packages.config 的项目。

    因此,要解决此问题,我们可以migrate from packages.config to PackageReference 或仅在.netframework 项目中使用包引用,然后我们可以使用任务dotnet restore 来恢复Azure DevOps 中的.sln 文件。

    此外,对于构建,尽管dotnet build 应该能够构建许多经典的 .NET Framework 项目,但许多功能可能无法正常工作,因为底层构建任务旨在在 .NET Framework 上运行并且可能表现不同或.NET Core 版本的 MSBuild 完全不支持,因此要构建 .sln 文件,我们建议使用 Visual Studio Build 任务或 MSBuild 任务。

    【讨论】:

    • 如果这个解决方案不能解决你的问题,你可能像我一样被误导了。我有一个混合解决方案,我尝试使用此修复程序但没有成功,经过大量研究后,我发现您可能需要使用更新版本的 nuget,在我的情况下,从 4.1.1 到 4.4.1 解决了这个问题。我的错误是:Package X 2.1.0 与 netcoreapp2.1 (.NETCoreApp,Version=v2.1) 不兼容。包 X 2.1.0 支持:netstandard2.0 (.NETStandard,Version=v2.0)
    • @Norcino,我遇到了同样的 Nuget 版本问题。在“Nuget 还原”步骤之前添加“Nuget 工具安装程序”步骤解决了该问题。
    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 2022-07-14
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2019-09-28
    • 2017-08-23
    • 2016-10-24
    相关资源
    最近更新 更多