NuGet的.props和.targets文件应该包含在源代码仓库中吗?

17

这些文件是在包还原期间创建的,因此我认为它们不必在存储库中。是否有进一步的文件说明它们的目的,可以帮助回答这个问题?


这是用于 .NET Core 项目吗? - Matt Ward
1
没错。@MattWard - Martin Komischke
2个回答

11
对于.NET Core项目,nuget.g.targets和nuget.g.props是通过NuGet还原生成的。它们被创建在obj文件夹中,因此您不需要将它们包含在版本控制中。通常,obj文件夹中的文件不会包含在版本控制中。
如果缺少这些文件,Visual Studio将在打开解决方案时自动还原这些文件。
如果您正在使用构建服务器,则可以运行“dotnet restore”来还原这些文件。使用Visual Studio 2017安装时安装的MSBuild 15也可以通过运行“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)中。

1
谢谢!我们正在通过Jenkins调用MSBuild,并需要添加/t:Restore参数。 - StCleezy

3

.targets文件被包含在项目文件中引用,因此在读取项目文件时必须放在正确位置。如果在构建项目开始时执行NuGet软件包还原,则在读取项目文件时这些文件不存在。

因此,将这些文件放入源代码控制中,以便在加载项目文件时始终存在。

另一种方法是拥有一个项目(所有其他项目都依赖于它),强制整个解决方案使用NuGet软件包还原(但它本身不使用任何软件包)。构建后,所有目标文件都已就位,并且项目文件也已经准备好了。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接