NuGetPackageImportStamp的用途是什么?


71

将某些NuGet程序包添加到项目时,有时.csproj文件的第一个属性组中会出现一个奇怪的项目。

<PropertyGroup>
  ...
  <NuGetPackageImportStamp>3d051ef3</NuGetPackageImportStamp>
</PropertyGroup>

戳记每次都不同,并且看起来不是连续的。

<NuGetPackageImportStamp>在NuGet文档中找不到任何参考。它是做什么用的,它是如何工作的?有必要吗?

似乎每次都会添加此包的一个包是StyleCop.MSBuild,至少与当前的4.7.49版本相同。只需将该包添加到新项目中,您就会看到该神秘物品出现在您的项目文件中。

Answers:


79

NuGetPackageImportStamp是Visual Studio 2013和更高版本的变通办法,无法检测到NuGet包已添加或删除了MSBuild导入。

对于Visual Studio的旧版本,不需要此解决方法。即使在Visual Studio 2013中,也可以安全地删除该属性:如果关闭并重新打开解决方案,则Visual Studio将重新加载导入的MSBuild目标。

NuGet源代码显示,当程序包添加或删除MSBuild导入时,NuGet会添加此属性。每次使用一个新的GUID。Visual Studio 2013检测到项目已更改,并提供了重新加载。仅添加或删除MSBuild导入不足以使Visual Studio 2013知道项目在运行时已更改,这是NuGet通过此变通办法解决的问题。

StyleCop.MSBuild NuGet程序包包含一个自定义MSBuild目标,因此添加或删除此NuGet程序包将导致添加此属性。


更新马特·沃德的评论是正确和重要的。

NuGet中仍然存在添加NuGet程序包标记的代码,并且该代码不再检查Visual Studio 2013。

这是我的底线建议:

  • 使用Visual Studio或Powershell创建新项目。
  • 当您更新旧的csproj且无法正常工作时,请将此旧的csproj与您使用Visual Studio或Powershell创建的新的工作csproj进行比较。如果新的工作csproj使用了<NuGetPackageImportStamp>指令,则将其添加到旧的坏了的csproj中,看看是否可以解决问题;无论您使用哪个Visual Studio版本。
  • 如果您的旧csproj仍然无法使用,请考虑使用该<TargetFrameworkProfile>指令。它在新的工作csproj中存在吗?考虑删除它。

1
目前,我正在将2个分支合并在一起,并且每个项目的csproj文件中此值始终不同。我选择哪种GUID有关系吗?
hvaughan3 2015年

2
@ hvaughan3-不,您选择哪种GUID都没关系。
马特·沃德

该元素仍然存在。我正在仅安装了VS2017的计算机上工作,而我(VS)设法将其添加到csproj文件中。
LosManos

1
还有在代码中的NuGet,增加的NuGet包邮票和代码不再检查的Visual Studio 2013年
马特·沃德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.