在.NET Standard项目中使用Package References后,如何恢复在packages.config中引用Nuget包?

时间:2017-07-21 18:38:32

标签: .net nuget .net-standard .net-standard-1.4

背景

我有几个C#代码库,我最近转换为目标.NET Standard 1.4,用于Xamarin Forms项目以及许多旧版.NET Framework 4.6.1项目。

我最初使用Package Reference in Project Files样式将Nuget包添加到.NET Standard类库中。

在了解this bug where transitive package references from .NET Standard projects are not resolved in legacy .NET Framework projects之后,我尝试了将<RestoreProjectStyle>PackageReference</RestoreProjectStyle>添加到旧项目的csproj中的解决方法。遗留项目仍然没有解决传递性引用 - 也就是说,解决方法不起作用。

所以,我想恢复我的.NET Standard项目中的packages.config文件中引用Nuget包的旧样式。

我遵循的步骤:

  • 卸载.NET Standard项目中的所有Nuget软件包,但NETStandard.Library除外,该软件包无法卸载
    • Nuget的我的VS默认设置是将解决方案中的第一个包添加到packages.config
  • Manage Nuget Packages工具窗口重新安装Nuget包
    • 此软件包作为PackageReference放在csproj中,而不是放在packages.config文件中。

有谁知道如何强制我的.NET Standard 1.4项目中的新Nuget包列在packages.config而不是包参考中?

4 个答案:

答案 0 :(得分:4)

除了从项目文件中删除PackageReferences之外,我还必须从$ProjectDir\obj目录中删除以下文件:

  • Myproject.csproj.nuget.cache
  • Myproject.csproj.nuget.g.props
  • Myproject.csproj.nuget.g.targets
  • project.assets.json

答案 1 :(得分:1)

如何回滚到packages.config

  1. 关闭迁移的项目。

  2. 从备份中复制项目文件和packages.config(通常是     \ MigrationBackup \\)到     项目文件夹。删除obj文件夹(如果存在)     项目根目录。

  3. 打开项目。

  4. 使用“工具”>“ NuGet软件包”打开软件包管理器控制台。     管理器>程序包管理器控制台菜单命令。

  5. 在控制台中运行以下命令:

    update-package -reinstall

来源:https://docs.microsoft.com/en-us/nuget/reference/migrate-packages-config-to-package-reference#how-to-roll-back-to-packagesconfig

答案 2 :(得分:1)

  1. 删除项目文件中的所有PackageReference。
  2. 删除$ ProjectDir \ obj中的所有缓存。
  3. 将一个空的packages.config文件(带有根标签)添加回项目中。
  4. 重建项目。然后,Visual Studio会提示您缺少的内容。
  5. 然后使用nuget Manager添加您选择的版本的软件包。
  6. 重复步骤4和5,VS会一一添加您的参考 回到packages.config文件。

答案 3 :(得分:0)

如果您还不需要删除此属性:<RestoreProjectStyle>PackageReference</RestoreProjectStyle>

然后删除项目中的任何PackageReferences。然后,当您添加nuget包引用时,它们应该进入package.config文件。