VS 2015 到 2017 迁移到包引用失败

VBS*_*arr 15 c# migrate visual-studio

我继承了一个 VS-2015 C# 应用程序,并希望将其迁移到 VS 2017 或 2019。它有一个包含 4 个包的 packages.config 文件:

<package id="AjaxControlToolkit" version="15.1.4.0" targetFramework="net4" />
<package id="EntityFramework" version="6.0.0" targetFramework="net4" />
<package id="Microsoft.AspNet.Providers" version="2.0.0" targetFramework="net4" />
<package id="Microsoft.AspNet.Providers.Core" version="2.0.0" targetFramework="net4" />
Run Code Online (Sandbox Code Playgroud)

项目的 sln 文件的前几行是:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}")
Run Code Online (Sandbox Code Playgroud)

我想将packages.config 文件迁移到csproj 文件。

在 Visual Studio 2017 中,我尝试通过右键单击 packages.config 并单击“将 packages.config 迁移到 PackageReference”来迁移它,但它给了我一个错误:

操作失败 - 项目不符合迁移条件。

错误信息

我也试过这个工具:https : //github.com/hvanbakel/CsprojToVs2017 ,这也失败了。

真的没有办法将它迁移到 .csproj 吗?

ADy*_*son 17

我已在较旧的 ASP.NET 项目中使用了此问题的解决方法(并且可能也适用于其他出现此问题的项目类型)。

本质上,迁移工具仍然可以工作,但首先您必须在进行迁移时欺骗 Visual Studio(暂时)认为您的项目是类库而不是 Web 项目。

详细步骤:

  1. 如果您的项目/解决方案在 Visual Studio 中打开,请关闭它,并对其进行备份

  2. 在文本编辑器中打开 .csproj 文件

  3. 剪切ProjectGuidProjectTypeGuids条目,并将它们临时粘贴到其他地方。

  4. 插入<ProjectGuid>{7C796B6B-86B5-4C57-ADAA-12CF1FECDA71}</ProjectGuid>ProjectGuid之前输入的位置,并保存文件

  5. 在 Visual Studio(2017 或更高版本)中打开项目

  6. 右键单击 packages.config 文件并选择迁移到包引用的选项。

  7. 迁移成功后,再次关闭项目/解决方案。

  8. 返回 .csproj 文件并将ProjectGuid条目替换为您在步骤 3 中保存的ProjectGuidProjectTypeGuids条目。

  9. 在 Visual Studio 中重新打开项目。您现在应该可以正常使用它了。

到目前为止,这对我有两个项目。我不能保证在边缘情况或更复杂的项目中不会有任何副作用,但这当然是您可以尝试的。

信贷这个GitHub上评论为理念。

  • 非常感谢!通过在迁移之前注释掉“ProjectTypeGuids”元素并单独保留“ProjectGuid”似乎也可以实现。 (5认同)
  • 谢谢你!它也对我有用,迁移了 4.6.1 aps.net Web 应用程序 (2认同)
  • 我无法编辑之前的评论,但此修复还将 Web.config 文件更改为 App.config。其他人需要注意的事情。我一直在与 Microsoft.Extensions.XXXX 包作斗争。 (2认同)
  • 您还可以通过卸载项目,双击 .csproj 在 Visual Studio 中编辑它,然后重新加载它来完成此操作,而不是使用文本编辑器。无论如何,我使用记事本粘贴旧的 GUID,但在 VS 中进行编辑。您可能需要删除生成的 app.config 并将其重新设置为启动项目。 (2认同)
  • 在 VS2022 为我工作 (2认同)

Mah*_*hdi 5

根据文档

迁移目前不适用于 C++ 和 ASP.NET 项目。

例如,迁移(通过右键单击包文件)适用于控制台应用程序。

  • 这是一个基于 C# 的项目,而不是 C++。有什么方法可以迁移到 PackageReference 吗? (2认同)
  • 有关 ASP.NET 特定限制的更多详细信息:https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#project-type-support 这引用了 https:// /github.com/NuGet/Home/issues/5877 包含血淋淋的细节。 (2认同)