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

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

邮票每次都不一样,而且似乎不是连续的.

我在NuGet文档中找不到任何关于<NuGetPackageImportStamp>的引用.它是用来做什么的,它是怎么工作的?有必要吗?

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

推荐答案

NuGetPackageImportStamp是Visual Studio 2013及更高版本无法检测到NuGet包是否添加或删除了MSBuild导入的解决方法.

较旧版本的Visual Studio不需要此变通方法.即使在Visual Studio 2013中,the property can safely be removed:如果关闭并重新打开解决方案,导入的MSBuild目标也将由Visual Studio重新加载.

NuGet source code显示NuGet在包添加或删除MSBuild导入时添加此属性.它每次都使用一个新的GUID.Visual Studio 2013检测到项目已更改,并提供重新加载.仅添加或删除MSBuild导入不足以让Visual Studio 2013知道项目在运行时发生了更改,这正是NuGet通过此解决方案解决的问题.

时尚警察.MSBuild NuGet包包含自定义MSBuild目标,因此添加或删除此NuGet包将导致添加此属性.


UPDATE:Matt Ward's comment是正确且重要的.

NuGet that adds the NuGet package stamp中仍有代码,并且代码不再判断Visual Studio 2013.

以下是我的基本建议:

  • 使用Visual Studio或Powershell创建新项目.
  • 当您更新旧的csproj并且它不工作时,将这个旧的csproj与您使用Visual Studio或Powershell创建的新的工作csproj进行比较.如果新的工作csproj使用<NuGetPackageImportStamp>指令,则将其添加到旧的损坏的csproj中,看看这是否解决了问题;regardless您使用的是哪个Visual Studio版本.
  • 如果你的旧CSPROJ仍然无效,请考虑<TargetFrameworkProfile>条指令.它存在于你的新工作csproj中吗?考虑删除这个.

.net相关问答推荐

Docker失败文件找不到

API响应返回null错误. NET MAUI

WinForm Task.Wait :为什么它会阻塞 UI?

如何运行大量阻塞/同步 I/O 操作

.NET 的future 版本会支持 C# 中的元组吗?

在一个 LINQ 查询中获取两列的总和

为什么 .Contains 慢?通过主键获取多个实体的最有效方法?

是否可以像 WebView 一样在 Windows 窗体中嵌入 Gecko 或 Webkit?

Style 和 ControlTemplate 的区别

将笔画应用于 WPF 中的文本块

调用委托与方法的性能

如何从 .NET 中的流中获取 MemoryStream?

形成两个列表并集的最简单方法

将 StreamReader 返回到开头

Dispatcher.CurrentDispatcher 与 Application.Current.Dispatcher

CI服务器的比较?

将日期时间转换为时间跨度

从 Visual Studio 2015 发布 - 允许不受信任的证书

从 bcp 客户端接收到 colid 6 的无效列长度

多行 C# 插值字符串文字