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中存在吗?考虑删除它。
csproj
文件中此值始终不同。我选择哪种GUID有关系吗?