【问题标题】:VS 2015 to 2017 migrate to package reference failedVS 2015 到 2017 迁移到包引用失败
【发布时间】:2019-12-26 03:15:29
【问题描述】:

我继承了一个 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 并单击“将 packages.config 迁移到 PackageReference”来迁移它,但它给了我一个错误:

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

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

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

【问题讨论】:

    标签: c# visual-studio migrate


    【解决方案1】:

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

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

    详细步骤:

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

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

    3. 剪切 ProjectGuid 和 ProjectTypeGuids 条目,并将它们临时粘贴到其他位置。

    4. 在您之前的@​​987654325@ 条目的位置插入&lt;ProjectGuid&gt;{7C796B6B-86B5-4C57-ADAA-12CF1FECDA71}&lt;/ProjectGuid&gt;,然后保存文件

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

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

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

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

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

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

    感谢this GitHub comment 的想法。

    【讨论】:

    • 谢谢!它也适用于我,迁移 4.6.1 aps.net 网络应用程序
    • 我在我的项目周围呼吸错了,它停止了构建,因为“必须使用 ProjectReference”。这解决了它!它确实重置了属性中的端口号。它可能会将所有内容重置为默认值,但这是唯一的非默认设置,所以我只需要改回来。
    • @jspinella 很高兴它对您有所帮助。我认为有一个或两个 nuget 包在某个版本之后需要包引用。因此,可能是对此类软件包的升级导致了您的问题。我不知道为什么存在这个要求,但我不久前注意到它并得到了和你一样的错误......不幸的是我忘记了它的具体包。
    • 我无法编辑我之前的评论,但此修复程序还将 Web.config 文件更改为 App.config。让别人知道的东西。我一直在与 Microsoft.Extensions.XXXX 包作斗争。
    • @Oleg Grishko 非常感谢!这对我有用,但有一点不同: 1. 我已经从解决方案中卸载了项目,评论了 {ProjectGuid 和 ProjectTypeGuids},添加了您的 ProjectGuid。 2.重新加载项目并迁移其包引用。 3 卸载并切换回原始 {P​​rojectGuid 和 ProjectTypeGuids} 并选择顶级附加参考
    【解决方案2】:

    根据documentation:

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

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

    【讨论】:

    • 这是一个基于 C# 的项目,而不是 C++。有什么方法可以迁移到 PackageReference?
    • @BeachBum 和 ASP.NET 项目与语言无关,所以很遗憾目前没有。
    • 有关 ASP.NET 特定限制的更多详细信息:docs.microsoft.com/en-us/nuget/consume-packages/… 这引用了带有血腥细节的 github.com/NuGet/Home/issues/5877。
    • 这是正确答案。经过一天试图消除 ADyson 回答造成的损害后,我放弃了。
    猜你喜欢
    • 2017-08-08
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2020-07-10
    • 2015-06-06
    相关资源
    最近更新 更多