什么是 nuget props 文件,它的用途是什么?

Posted

技术标签:

【中文标题】什么是 nuget props 文件,它的用途是什么?【英文标题】:What is nuget props file and what is it for? 【发布时间】:2019-05-19 18:12:35 【问题描述】:

我环顾四周并阅读了很多内容,但找不到明确的答案来解释“nuget.props”文件是什么以及它的用途。

有什么解释,也许还有一些例子?

【问题讨论】:

您的意思是nuget.g.props,还是您在某个地方找到了nuget.props?如果有,在哪里? nuget.props 文件是 Package.props 文件,在构建包时可以包含在 nuget 包中 【参考方案1】:

从一些背景信息开始,.NET 项目是使用 MSBuild 构建的。 C# 项目的.csproj 只是一个带有文件扩展名的 MSBuild 项目文件,按照惯例表明它是 C# 而不是其他语言,但对于 MSBuild,它只是一个项目文件。 MSBuild 只有少数基本类型、属性、项、目标和任务。按照惯例,属性和项目放在扩展名为.props 的文件中,而任务和目标放在以.targets 结尾的文件中。这就是为什么如果您查看旧式csproj 文件,您会看到<Import Project="path\to\Microsoft.Common.CSharp.props" /><Import Project="path\to\Microsoft.Common.CSharp.targets" />。新的 SDK 风格项目是 basically syntactic sugar 做同样的事情。

接下来,MSBuild 和 .NET 团队使构建系统具有可扩展性。因此,您可以替换构建系统的某些部分,或者在其中添加其他内容,而不是仅限于 Microsoft 在 C# 编译器/构建系统中内置的内容。如果没有 NuGet,执行此操作的方法是在某处创建您自己的 .props.targets 文件,然后编辑您的 .csproj 并添加 <Import ... /> 语句。如果您的道具和目标与使用它的对象位于同一源代码存储库中,这可以正常工作,但是编辑您的 csproj 并将路径硬编码到 propstargets 文件的路径不会那么好。

NuGet 可以帮助解决这个问题。如果您使用 appropriate conventions 创建包,NuGet 将确保在构建中发现和使用道具和目标。对于使用packages.config 的项目,NuGet 将在安装/升级/卸载时为您编辑csproj。使用PackageReference 的项目,NuGet 将向名为nuget.g.propsnuget.g.targets 的中间目录(obj/ 文件夹)写入一个文件,该文件从所有引用的 NuGet 包中导入所有propstargets 文件,以及构建系统使用这些文件。

我能想到的第一个示例是,如果您想使用比系统上安装的更新版本的 .NET 编译器,那么为什么有人会这样做。只需引用Microsoft.Net.Compilers 包,包中的.props.targets 将替换系统安装的构建系统中的编译目标/任务,并使用包中的那个。这允许您在系统上安装编译器之前使用新的语言功能,或者如果您想确保代码的所有构建都使用相同的编译器,即使不同的开发人员或 CI 代理安装了不同版本的东西。

另一个例子可能是预编译脚本。如果您有自己的脚本语言,请创建将它们转换为 C# 文件的构建工具,然后编写将在“实际构建”之前运行的 MSBuild 道具和目标,以将您的自定义语言转换为 C#,将生成的 .cs 文件保存到中间文件夹,为这些生成的文件添加 MSBuild 编译项,然后 C# 编译器将与项目中的所有其他 .cs 文件一起编译它。您需要对 MSBuild 和 .NET 构建系统有一定的了解,但这是可能的。

【讨论】:

以上是关于什么是 nuget props 文件,它的用途是什么?的主要内容,如果未能解决你的问题,请参考以下文章

CSRF 保护的真正用途是啥?

朝夕教育2023年03月 其他-Web前端基础面试题(VUE专项_58道)

在 NuGet 安装时将文件复制到 Android 项目

Nuget包安装错误 - 无效的URI:无法解析权限/主机

使用“applicationSignificantTimeChange”

什么是 JNDI?它的基本用途是什么?什么时候使用?