NuGetPackageImport 戳是用来做什么的?

在向项目中添加某些 NuGet 包时,有时会在。Csproj 文件。

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

邮票每次都不一样,而且看起来不是连续的。

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

有一个软件包似乎每次都会添加这个功能,那就是 StyleCop.MSBuild,至少在当前的4.7.49版本中是这样。只需将这个包添加到一个新项目中,您就会看到这个神秘的项目出现在您的项目文件中。

15476 次浏览

NuGetPackageImport Stamp 是一个针对 VisualStudio2013和更高版本的解决方案,它无法检测 NuGet 包是否添加或删除了 MSBuild 导入。

此解决方案对于较早版本的 VisualStudio 不是必需的。即使在 VisualStudio2013中,财产可以安全地被移除: 如果关闭并重新打开解决方案,VisualStudio 也会重新加载导入的 MSBuild 目标。

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

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


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

添加 NuGet 包邮票的 NuGet中仍然有代码,代码不再检查 VisualStudio2013。

以下是我的底线建议:

  • 使用 VisualStudio 或 Powershell 创建新项目。
  • 当您更新一个旧的 csproj 时,如果它不工作了,请将这个旧的 csproj 与您使用 Visual Studio 或 Powershell 创建的一个新的工作 csproj 进行比较。如果新的运行的 csproj 使用 <NuGetPackageImportStamp>指令,那么将其添加到旧的破碎的 csproj 中,看看是否修复了问题; 使用的是 Visual Studio 版本的 无论如何
  • 如果您的旧 csproj 仍然无法工作,请考虑 <TargetFrameworkProfile>指令。它是否存在于您的新的工作 csproj?考虑把这个拿掉。