【发布时间】:2023-04-02 19:35:01
【问题描述】:
这些文件是在包还原期间创建的,这就是为什么我认为它们不必在存储库中。是否有关于这些文件用途的进一步文档可能有助于回答问题?
【问题讨论】:
-
这是针对 .NET Core 项目的吗?
-
没错。 @MattWard
标签: visual-studio package nuget restore
这些文件是在包还原期间创建的,这就是为什么我认为它们不必在存储库中。是否有关于这些文件用途的进一步文档可能有助于回答问题?
【问题讨论】:
标签: visual-studio package nuget restore
对于 .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) 中。
【讨论】:
.targets 文件包含从项目文件中引用,因此需要在读取项目文件时就位。如果在开始构建项目时完成 NuGet 包还原,则在读取项目文件时这些文件不存在。
因此将这些文件放入源代码管理中,以便在加载项目文件时它们始终存在。
另一种方法是创建一个项目(所有其他项目都依赖该项目),该项目强制为整个解决方案执行 NuGet 包还原(但它本身不使用任何包)。构建完成后,当项目文件到位时,所有目标文件都到位。
当然,许多 NuGet 包不使用此类文件,这不是问题。
【讨论】: