Dot-Net
NuGetPackageImportStamp 有什麼用?
將某些 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 中?考慮刪除它。