【问题标题】:Should nuget .props and .targets files be part of the source code repository?nuget .props 和 .targets 文件是否应该成为源代码存储库的一部分?
【发布时间】:2023-04-02 19:35:01
【问题描述】:

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

【问题讨论】:

  • 这是针对 .NET Core 项目的吗?
  • 没错。 @MattWard

标签: visual-studio package nuget restore


【解决方案1】:

对于 .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) 中。

【讨论】:

  • 谢谢!我们通过 Jenkins 调用 MSBuild,需要添加 /t:Restore 参数。
【解决方案2】:

.targets 文件包含从项目文件中引用,因此需要在读取项目文件时就位。如果在开始构建项目时完成 NuGet 包还原,则在读取项目文件时这些文件不存在。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2019-12-12
    • 2011-05-13
    • 1970-01-01
    • 2015-11-05
    相关资源
    最近更新 更多