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

VS 2015 to 2017 migrate to package reference failed

我继承了一个 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" />

项目的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}")

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

在 Visual Studio 2017 年,我尝试通过右键单击 packages.config 并单击 'Migrate packages.config to PackageReference' 来迁移它,但它给了我一个错误:

Operation Failed - Project is not Eligible for Migration.

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

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

根据 documentation:

Migration is not currently available for C++ and ASP.NET projects.

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

这个问题有一个变通方法,我已将其用于较旧的 ASP.NET 项目(并且可能适用于也存在此问题的其他项目类型)。

基本上,迁移工具仍然可以工作,但首先你必须在迁移时欺骗 Visual Studio(暂时)认为你的项目是一个 class 库而不是 Web 项目。

详细步骤:

  1. 如果 project/solution 在 Visual Studio 中打开,请关闭它,然后 备份它

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

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

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

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

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

  7. 迁移成功后,再次关闭project/solution。

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

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

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

创意归功于 this GitHub comment