nuget .props 和 .targets 文件应该是源代码存储库的一部分吗?

Should nuget .props and .targets files be part of the source code repository?

这些文件是在包还原期间创建的,这就是为什么我认为它们不必位于存储库中。是否有可能有助于回答问题的有关这些文件用途的进一步文档?

.targets 文件包含在项目文件中引用,因此在读取项目文件时需要在适当的位置。如果 NuGet 包还原是在构建项目开始时完成的,那么这些文件在读取项目文件时不存在。

因此将这些文件置于源代码管理中,以便在加载项目文件时它们始终存在。

另一种方法是让一个项目(所有其他项目都依赖于该项目)强制对整个解决方案执行 NuGet 包还原(但它本身不使用任何包)。构建完成后,当项目文件就位时,所有目标文件就位。

当然,许多 NuGet 包不使用此类文件,这不是问题。

对于 .NET Core 项目,nuget.g.targets 和 nuget.g.props 由 NuGet 还原生成。它们是在 obj 文件夹中创建的。所以你不需要在版本控制中有这些。通常 obj 文件夹中的文件不包含在版本控制中。

如果这些文件丢失,

Visual Studio 将在打开解决方案时自动恢复这些文件。

如果您使用的是构建服务器,那么您可以运行 dotnet restore 来恢复这些文件。 MSBuild 15 与 Visual Studio 2017 一起安装时也可以通过 运行 宁 msbuild /t:Restore 的解决方案来恢复这些文件。

nuget.g.targets 和 nuget.g.props 文件定义了各种属性,例如包缓存在您机器上的路径。它们还包括项目需要引用的 NuGet 包的任何 MSBuild 导入。

例如,如果您引用了 Microsoft.Net.Test.Sdk NuGet 包,则 nuget.g.targets 和 nuget.g.props 导入包含在该 NuGet 包中的 MSBuild 文件。使用 packages.config 文件时,这些导入将直接添加到您的项目文件 (.csproj) 中。