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