Dot-Net

NuGetPackageImportStamp 有什麼用?

  • June 5, 2014

將某些 NuGet 包添加到項目時,有時會在 .csproj 文件的第一個屬性組中出現一個奇怪的項。

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

印章每次都不一樣,而且似乎不是連續的。

<NuGetPackageImportStamp>我在 NuGet 文件中找不到任何參考。它有什麼用,它是如何工作的?有必要嗎?

StyleCop.MSBuild似乎每次都會添加一個包,至少在目前的 4.7.49 版本中是這樣。只需將該包添加到一個新項目中,您就會看到這個神秘項目出現在您的項目文件中。

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 中?考慮刪除它。

引用自:https://stackoverflow.com/questions/24049961