Visual studio 2017 切换回packages.config-回答澄清

Visual studio 2017 切换回packages.config-回答澄清,visual-studio-2017,nuget,packagereference,packages.config,Visual Studio 2017,Nuget,Packagereference,Packages.config,按照规定,我必须问一个新问题,以澄清另一个问题/答案 答案是这样的: 然后呢?只是做了接受的回答,但是packages.config文件没有填充包(我知道它没有这么说) 如果软件包自动出现在packages.config中,或者我需要再次安装它们,我将错过下一步要做的事情 我倾向于后者,但我觉得答案并不完整:) 但是该怎么办呢?首先,您是否介意编辑您的问题,或者作为评论发布,为什么要恢复到packages.config?作为NuGet团队的一员,了解PackageReference不适用于您的原

按照规定,我必须问一个新问题,以澄清另一个问题/答案

答案是这样的:

然后呢?只是做了接受的回答,但是packages.config文件没有填充包(我知道它没有这么说)

如果软件包自动出现在packages.config中,或者我需要再次安装它们,我将错过下一步要做的事情

我倾向于后者,但我觉得答案并不完整:)


但是该怎么办呢?

首先,您是否介意编辑您的问题,或者作为评论发布,为什么要恢复到packages.config?作为NuGet团队的一员,了解PackageReference不适用于您的原因非常有用。如果这不是在a,include部分中列出的原因之一,也许我们可以帮助解决该问题,以便您可以继续使用PackageReference

如果您真的想恢复到packages.config,我建议您使用以下内容,而不是您链接的答案

  • 转到选项,NuGet PackageManager->General,并在第一次安装软件包时启用
    Allow format selection
  • 使用“管理NuGet软件包”(软件包管理器UI)卸载项目中的所有软件包。您可以使用Package Manager控制台卸载,但下一步必须使用Package Manager UI。跟踪卸载的软件包,以便在下一步中再次安装
  • 一旦您的项目没有包引用,然后再次安装所需的包。安装的第一个软件包将弹出一个对话框,您可以在其中选择使用packages.config或packagesreference。如果您没有跟踪在上一步中卸载的软件包,请使用源代码管理系统来区分项目文件,或者查看未修改的副本,并查找
    PackageReference
    的所有实例
  • 有必要卸载项目中的所有软件包并安装一个新的软件包,因为如果项目文件中存在任何PackageReference,NuGet将添加新的软件包作为PackageReference。因此,您不能卸载第一个软件包,重新安装它,然后在项目中移动第二个软件包

    如果软件包自动出现在packages.config中,或者我需要再次安装它们,我将错过下一步要做的事情

    是的,您必须重新安装这些软件包。这是因为从
    PackageReference
    ->
    packages.config
    自动迁移项目是不受支持的

    检查螺纹:

    要完成此操作,您可以执行以下步骤:

    首先,将包管理更改为Packages.config,
    工具
    ->
    选项
    ->
    NuGet包管理器
    ->
    包管理

    其次,卸载项目并对其进行编辑,从项目文件中删除所有
    PackageReference
    元素(确保项目文件中未设置该元素)

    第三,重新加载项目,然后重新安装这些包


    希望这能有所帮助。

    原始答案提到创建一个空的packages.config文件,但正如您所提到的,并没有指出下一步要做什么。一个选择是再次安装它们。另一个选项是编辑packages.config文件并将包信息添加到packages.config文件中。但是,与packages.config文件一样,packagesreference不包括项目文件中的所有依赖项。因此,您需要使用“更新包-重新安装”来重新安装它们,以确保添加缺少的包。我们发现,使用包引用我们的生成没有正确打包(nuget pack)依赖项。于是我们又回复了。你的过程就是我们最终要做的。不时清除obj文件夹,以使VS中的参考列表正确显示。今天上午我与我的团队进行了交谈,他们告诉我,dotnet cli有自己的目标,即使在运行“旧式”csproj(不是SDK项目)时也是如此。如果已安装.NET Core(包括dotnet cli),则可以尝试
    dotnet pack myproj.csproj
    打包PackageReference项目并自动获取nuget依赖项。不过我还没有时间亲自测试。如果您可以将项目迁移到SDK项目,那么肯定不会有问题,因为这是它设计的场景。不幸的是,并非存在于非SDK项目中的SDK项目中的所有功能都存在(GUI应用程序是最大的违规者,但甚至有些库也存在问题)。由于,非SDK项目中的PackageReference基本上已中断,因此我们唯一的选择是迁移回packages.config。@qid您链接的错误只是nuget.exe无法打包ProjectReference,您需要使用
    msbuild-t:pack
    (必要时导入nuget.Build.Tasks.pack,如不使用SDK项目). 考虑到没有打包的项目比打包的项目多得多,虽然我承认您和其他客户遇到了问题,但说整个功能“基本上坏了”感觉不公平。在某些情况下,它工作得很好。@zivkan我已经尝试过这种方法,但是MSBuild失败了,说找不到“pack”目标。我在链接的github问题上添加了一条关于这一点的评论。我同意这个问题不会影响所有场景,但在它确实影响的场景中,目前还没有可用的解决方案。