【问题标题】:Is it safe/feasible to migrate to "new project system" (PackageReference) for .NET framework solutions containing ASP.NET projects?对于包含 ASP.NET 项目的 .NET 框架解决方案,迁移到“新项目系统”(PackageReference)是否安全/可行?
【发布时间】:2018-07-25 10:34:15
【问题描述】:

根据文档,ASP.NET 项目(尚)不支持新的 PackageReference https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files

但是 ASP.NET 所依赖的类库呢?假设我有以下 .NET Framework 解决方案:

  • Foo.Domain
  • Foo.PublicApi.Contract
  • Foo.Services
  • Foo.AspNetWebApp(已引用以上所有内容)

我无法迁移到 PackageReference Foo.AspNetWebApp,因为它不支持 ASP.NET 非核心项目。但是我可以迁移其他所有内容吗? 是否支持场景?我至少会赢得其他一切的合并:-)

【问题讨论】:

    标签: c# asp.net .net nuget csproj


    【解决方案1】:

    在进行 NuGet 包还原(较短的 CI 构建)时,这是可行的,并且会为您节省大量时间, 您可以阅读有关收益的更多详细信息here

    您还可以使用以下有用的extension 轻松进行转换。

    【讨论】:

    • Migrator 似乎已经在 15.7 中作为 Visual Studio 的一部分提供
    • 并不总是按应有的方式工作,这就是为什么我添加了扩展作为一个选项,我在使用它时一直遇到问题。
    【解决方案2】:

    我在我的 asp.net 项目转换过程中使用了以下 PowerShell 脚本,目前已成功处理了 20 多个项目。您必须首先在工具 > NuGet 包管理器 > 包管理器设置 > 默认包管理格式中将 PackageReference 更改为 Visual Studio 的默认行为。然后您可以在 Package Manager Console 窗口中运行 powershell 脚本,替换您要迁移的项目的名称。

    $packages = Get-Package -ProjectName MyProjectName
    $packages | %{ Uninstall-Package -Id $_.Id -ProjectName $_.ProjectName -RemoveDependencies -Force}
    $packages | %{ Install-Package -Id $_.Id -Version $_.Versions[0] -ProjectName $_.ProjectName }
    

    预计在卸载步骤中会出现一些无害的错误,因为此脚本将尝试按照列出的顺序强制卸载所有内容,而不是依赖项的顺序。最后,它确实将它们全部删除并为您摆脱了您的 packages.config。然后脚本的最后一行将它们全部添加回来作为 PackageReference 的。如果卸载遗漏了一些应该被删除的目标或包文件夹引用,有时您需要进行一些项目文件维护。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 2015-08-26
      • 2016-02-28
      相关资源
      最近更新 更多