什么是 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 并将路径硬编码到 props
和 targets
文件的路径不会那么好。
NuGet 可以帮助解决这个问题。如果您使用 appropriate conventions 创建包,NuGet 将确保在构建中发现和使用道具和目标。对于使用packages.config
的项目,NuGet 将在安装/升级/卸载时为您编辑csproj
。使用PackageReference
的项目,NuGet 将向名为nuget.g.props
和nuget.g.targets
的中间目录(obj/
文件夹)写入一个文件,该文件从所有引用的 NuGet 包中导入所有props
和targets
文件,以及构建系统使用这些文件。
我能想到的第一个示例是,如果您想使用比系统上安装的更新版本的 .NET 编译器,那么为什么有人会这样做。只需引用Microsoft.Net.Compilers 包,包中的.props
和.targets
将替换系统安装的构建系统中的编译目标/任务,并使用包中的那个。这允许您在系统上安装编译器之前使用新的语言功能,或者如果您想确保代码的所有构建都使用相同的编译器,即使不同的开发人员或 CI 代理安装了不同版本的东西。
另一个例子可能是预编译脚本。如果您有自己的脚本语言,请创建将它们转换为 C# 文件的构建工具,然后编写将在“实际构建”之前运行的 MSBuild 道具和目标,以将您的自定义语言转换为 C#,将生成的 .cs
文件保存到中间文件夹,为这些生成的文件添加 MSBuild 编译项,然后 C# 编译器将与项目中的所有其他 .cs
文件一起编译它。您需要对 MSBuild 和 .NET 构建系统有一定的了解,但这是可能的。
【讨论】:
以上是关于什么是 nuget props 文件,它的用途是什么?的主要内容,如果未能解决你的问题,请参考以下文章
朝夕教育2023年03月 其他-Web前端基础面试题(VUE专项_58道)