MSBuild文件有标准的文件扩展名吗?

67

是否有标准的文件扩展名用于不是项目文件而是更复杂的构建脚本的MSBuild文件?

我考虑使用 .msbuild.proj 来避免与其他 .proj 文件混淆(我知道实际上它们也是 MSBuild 文件)。


我不知道是否有“标准”,但我使用msbuild.xml作为名称。 - Cheeso
1
我想补充一下,根据书籍,名称“*.*proj”对于MSBuild具有特殊意义。我不知道这是否意味着在其自身的扩展机制之外还有其他含义,但它启发我只使用.proj。 - JDługosz
4个回答

82

更新: 回顾过去,我已经更新了答案以包括更多的约定。 感谢Sayed Ibrahim Hashimi和这个线程中的其他人。


.proj

这是一种通用的约定,常用于主构建脚本。

示例:

build.proj
main.proj 
company.product.build.proj

.targets

.targets文件是指那些可以通过导入元素导入到其他文件中的文件。由于这些文件严格可重用,它们实际上并不构建任何东西。通常缺少属性和项目值来实际构建任何内容。

示例:

Microsoft.Common.targets
Microsoft.CSharp.targets
Microsoft.Data.Entity.targets

.**proj

这是一种特定编程语言的命名约定,其中****代表该语言的简称。

常见的扩展名包括:

.csproj    | C#
.vbproj    | VB.NET
.vcxproj   | Visual C++
.dbproj    | Database project
.fsproj    | F#
.pyproj    | IronPython
.rbproj    | IronRuby
.wixproj   | Windows Installer XML (WiX)
.vdproj    | Visual Studio Deployment Project
.isproj    | InstallShield 
.pssproj   | PowerShell
.modelproj | Modeling project

.props

Visual C++项目(.vcxproj)使用的项目属性表

示例:

Microsoft.Cl.Common.props
Microsoft.Cpp.CoreWin.props
Microsoft.Cpp.props
Microsoft.Link.Common.props

.tasks

这是一个常见的包含文件,被调用的MSBuild项目导入。包含一系列<UsingTask>元素的列表。

示例:

Microsoft.Common.Tasks
MSBuild.ExtensionPack.tasks

.settings.targets

(严格来说,这不是文件扩展名,而是一个相关的约定。)

这是一个常见的包含文件,由调用MSBuild项目导入。它包含与构建和部署过程中使用的共享工具以及任何其他常见设置相关的各种属性。(Sayed Ibrahim Hashimi, 2009)

示例:

EntityFramework.settings.targets

Compiler.settings.targets

Library.Settings.targets


2
我也经常使用“.user”进行非源代码控制的覆盖(我在我的标准.gitingore文件中有“*.user”),并且在存在“.user”版本之后,有条件地导入此文件。例如,如果我有一个<import Project="MyProject.settings.targets" />,那么我会在该行后面跟着一个<Import Project="MyProject.settings.targets.user" Condition="Exists('MyProject.settings.targets.user')" />。这样,如果我需要为本地机器覆盖任何内容但不想将其放在源代码控制中,我可以将其放在那里。 - DotNetSparky

15

最接近标准的格式如下:

  1. .proj
  2. .targets
  3. .XXproj

.targets 文件是指在其他文件中使用 Import 元素 导入的文件。由于这些文件严格可重用,它们本身不会构建任何内容。通常缺少实际构建所需的属性和项值。

.proj 文件是可以单独构建的已创建文件。它们可以导入 .targets 文件。

.XXproj, 例如 .csproj 或 .vbproj 是构建包含特定语言的文件的文件。例如,.csproj 用于 C# 项目,而 .vbproj 用于 VB.NET 项目文件。此约定来自 Visual Studio。


Sayed,你有这个的来源吗?可以贴一个链接吗? - Josh Kodroff
这并没有被正式记录在任何地方,但这是惯例。 - Sayed Ibrahim Hashimi
有没有任何开源项目可以用作参考? - Josh Kodroff
1
嗯,我不知道,但是我对MSBuild的情况非常了解,所以我认为我是一个相当可靠的信息来源(http://sedotech.com/Resources/InsideMSBuildBook)。 - Sayed Ibrahim Hashimi

5
我们只需使用.build

可以使用 *.工程 来刁难那些没有正确 Unicode 支持的工具。 - JDługosz

3
我建议采用VS的做法:
.*proj for project files --- msbuild.exe will find them automatically if they match this pattern
.targets for build process --- generally imported towards the end of your project
.props for shared settings --- generally imported towards the top of your project. C++ (*.vcxproj) files use these, and they will doubtless get added to VB and C# default project files at some point.

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