Is there a standard file extension for MSBuild files?

Msbuild

Msbuild Problem Overview


Is there a standard file extension for MSBuild files that are not project files but instead more complex build scripts?

I was thinking .msbuild.proj to avoid confusion with other .proj files (which I am aware are actually MSBuild files).

Msbuild Solutions


Solution 1 - Msbuild

UPDATE: In retrospect, I've updated the answer to include more conventions. Credit goes to Sayed Ibrahim Hashimi and others on this thread.


.proj

A popular convention for generic use. Commonly used by a main build script.

Examples:

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

.targets

.targets files are those which is meant to be imported into other files using the Import element. Since these files are strictly re-useable they don't actually build anything. They typically are missing the properties and item values to actually build anything.

Examples:

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

.**proj

Language specific convention where **** represents the language short acronym.

Well-known extensions:

.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

A project property sheet used by Visual C++ projects (.vcxproj).

Examples:

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

.tasks

A common include file to be imported by a calling MSBuild project. Contains a list of <UsingTask> elements.

Examples:

Microsoft.Common.Tasks
MSBuild.ExtensionPack.tasks

.settings.targets

(This is a related convention if not strictly-speaking a file extension.)

A common include file to be imported by a calling MSBuild project. Contains "various properties related to shared utilities used during the build and deployment processes as well as any other common settings" (Sayed Ibrahim Hashimi, 2009).

Examples:

EntityFramework.settings.targets

Compiler.settings.targets

Library.Settings.targets

Solution 2 - Msbuild

The closest there is to a standard is as follows:

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

.targets files are those which is meant to be imported into other files using the Import element. Since these files are strictly re-useable, they don't build anything. They typically are missing the properties and item values actually to build anything.

.proj files are created files which can be built by themselves. They may import .targets files.

.XXproj, for example, .csproj or .vbproj are files which build files containing a specific language. For example .csproj is for C# projects and .vbproj for VB.NET project files. This convention comes from Visual Studio.

Solution 3 - Msbuild

We just use .build

Solution 4 - Msbuild

I recommend what VS does:

.*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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJosh KodroffView Question on Stackoverflow
Solution 1 - MsbuildKMorazView Answer on Stackoverflow
Solution 2 - MsbuildSayed Ibrahim HashimiView Answer on Stackoverflow
Solution 3 - MsbuildRichard EvView Answer on Stackoverflow
Solution 4 - Msbuildcheerless bogView Answer on Stackoverflow