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 项目。
详细步骤:
如果 project/solution 在 Visual Studio 中打开,请关闭它,然后 备份它。
在文本编辑器中打开 .csproj 文件
剪切 ProjectGuid
和 ProjectTypeGuids
条目,并将它们临时粘贴到其他地方。
在之前 ProjectGuid
输入的位置插入 <ProjectGuid>{7C796B6B-86B5-4C57-ADAA-12CF1FECDA71}</ProjectGuid>
,然后保存文件
在 Visual Studio(2017 或更高版本)中打开项目
右键单击 packages.config 文件并选择迁移到包引用的选项。
迁移成功后,再次关闭project/solution。
返回 .csproj 文件并将 ProjectGuid
条目替换为您在步骤 3 中保存的 ProjectGuid
和 ProjectTypeGuids
条目。
重新打开 Visual Studio 中的项目。您现在应该可以正常使用它了。
到目前为止,这对我的两个项目都有效。我不能保证在边缘情况或更复杂的项目中不会有任何副作用,但这肯定是您可以尝试的。
创意归功于 this GitHub comment。
我继承了一个 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 项目。
详细步骤:
如果 project/solution 在 Visual Studio 中打开,请关闭它,然后 备份它。
在文本编辑器中打开 .csproj 文件
剪切
ProjectGuid
和ProjectTypeGuids
条目,并将它们临时粘贴到其他地方。在之前
ProjectGuid
输入的位置插入<ProjectGuid>{7C796B6B-86B5-4C57-ADAA-12CF1FECDA71}</ProjectGuid>
,然后保存文件在 Visual Studio(2017 或更高版本)中打开项目
右键单击 packages.config 文件并选择迁移到包引用的选项。
迁移成功后,再次关闭project/solution。
返回 .csproj 文件并将
ProjectGuid
条目替换为您在步骤 3 中保存的ProjectGuid
和ProjectTypeGuids
条目。重新打开 Visual Studio 中的项目。您现在应该可以正常使用它了。
到目前为止,这对我的两个项目都有效。我不能保证在边缘情况或更复杂的项目中不会有任何副作用,但这肯定是您可以尝试的。
创意归功于 this GitHub comment。