【问题标题】:Can I avoid NuGet removing Private (Copy Local) tag我可以避免 NuGet 删除私有(复制本地)标签吗
【发布时间】:2018-10-09 17:22:31
【问题描述】:

自从我们的团队从 Visual Studio 2015 升级到 Visual Studio 2017 后,我们在使用 NuGet 包时遇到了问题。每次我们更新软件包(无论是什么提要),例如MVC 更新移除了项目文件中的“Private”标签:

<Reference Include="System.Web.Mvc, Version=5.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <HintPath>..\packages\Microsoft.AspNet.Mvc.5.2.4\lib\net45\System.Web.Mvc.dll</HintPath>
  <Private>True</Private>
</Reference>

就我个人而言,是否将程序集复制到任何输出目录并不重要。但似乎 Visual Studio 本身存在问题,因为它在代码编辑器中出现数百个错误,尽管编译成功完成。

是否可以避免 NuGet Packet Manager 这样做?或者有没有其他解决办法?

【问题讨论】:

  • 您是否在使用 PackageReference 而不是 NuGet 包上的旧参考时有相同的行为?在 VS2017 中,我建议在项目中使用 PackageReference 并删除 packages.config。您需要将 ToolsVersion 更新为 15.0
  • 感谢您的回复。我认为对 ToolsVersion 的提示起到了作用。无论如何要完成我的回答,我们仍在使用packages.config。我们没有任何时间计划迁移到 VS 2017,因为 VS 2015 的更新使 VS 无法使用。 :-(

标签: .net visual-studio-2017 nuget


【解决方案1】:

是否可以避免 NuGet Packet Manager 这样做?或者有没有其他解决办法?

恐怕没有办法解决这个问题。因为这是 NuGet 的默认行为。

当我们更新 nuget 包或重新安装 nuget 包时,在卸载过程中,该项目及其所有元数据(例如,私有)将从项目文件中删除。在安装步骤中,只有在需要时才会添加显式私有元数据。因此,如果引用的程序集无论如何都会被复制到本地,&lt;Private&gt;true&lt;/Private&gt; 将被删除。

因此,Visual Studio 会在构建时将引用的程序集复制到 bin 目录,即使该标记已从项目文件中删除。该程序集引用上的属性检查器还显示,即使没有该标记,Visual Studio 也会继续将“复制本地”解释为“真”。

查看this thread了解更多详情。

希望这会有所帮助。

【讨论】:

  • 嗯,这似乎不太正确。因为在升级到 Visual Studio 2017 之前,更新 NuGet 包后,私有标记仍保留在项目文件中。而且在手动更新项目文件中的工具版本之前,引用的程序集也没有在本地复制。
猜你喜欢
  • 1970-01-01
  • 2013-01-09
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 2015-01-31
  • 1970-01-01
相关资源
最近更新 更多