Project Capabilities

January 16, 2023 ยท View on GitHub

Please read about project capabilities.

Below is a section for each project capability to describe itself including what it semantically is intended to mean possibly including examples of projects known to declare the capability.

Project capabilityDescription
VisualCProject may contain or compile C++ source files.
CSharpProject may contain or compile C# source files.
FSharpProject may contain or compile F# source files.
VBProject may contain or compile VB source files.
JavaScriptProject contains and handles JavaScript source files.
TypeScriptIndicates that the TypeScript build targets are imported into the project and the project is capable of compiling TypeScript source files into JavaScript.
JavaScriptProjectIndicates that the project supports JavaScript development. This capability also means that the project can manage JavaScript related project items.
JavaScriptUAPProjectThe JavaScript project targets the Universal Windows Platform of Windows 10.
JavaScriptWindowsPhoneProjectThe JavaScript project targets Windows Phone 8.1 platform.
JavaScriptWindowsAppContainerProjectIndicates that the project is both "JavaScript" and "WindowsAppContainer", so all JavaScript projects that emit *.AppX bundles will declare this capability.
JavaScriptWJProjectThe JavaScript project targets Windows 8.1 desktop platform.
CordovaThe project integrates with and depends on Apache Cordova.
FileSystemBasedCordovaProjectIndicates that the Cordova project looks to the file system to determine the project content. This is the defining capability for the project system in Visual Studio Tools for Apache Cordova.
CPSProject is based on the Project System Extensibility SDK
HostSetActiveProjectConfiguration
ProjectConfigurationsInferredFromUsage
ProjectConfigurationsDeclaredAsItems
RunningInVisualStudio
NotLoadedWithIDEIntegration
RenameNearbySimilarlyNamedImportsWithProject
DeclaredSourceItemsIndicates that the project is a typical MSBuild project (not DNX) in that it declares source items in the project itself (rather than a project.json file that assumes all files in the directory are part of a compilation).
UserSourceItemsIndicates that the user is allowed to add arbitrary files to their project.
SourceItemsFromImports
AssemblyReferencesIndicates that the project supports assembly references.
COMReferencesIndicates that the project supports COM references.
ProjectReferencesIndicates that the project supports project references.
PackageReferencesIndicates that the project supports package references. For eg: C# projects use PackageReference items for NuGet package references.
SDKReferencesIndicates that the project supports SDK references.
SharedProjectReferencesIndicates that the project supports references to Shared Projects.
WinRTReferencesIndicates that the project references WinRT libraries.
OutputGroups
AllTargetOutputGroups
VisualStudioWellKnownOutputGroups
SingleFileGenerators
Managed
SharedAssetsProject
SharedImports
NestedProjects
WindowsXaml
WindowsXamlPage
WindowsXamlCodeBehind
WindowsXamlResourceDictionary
WindowsXamlUserControl
RelativePathDerivedDefaultNamespaceDEPRECATED This is an example of a BAD project capability because it merely exists to activate a design-time experience and does not reflect a genuine capability of the project. This should be a project property instead.
ReferencesFolderDEPRECATED This is an example of a BAD project capability because it merely exists to activate a design-time experience and does not reflect a genuine capability of the project. If worth keeping at all, this should be a project property instead.
LanguageServiceDEPRECATED This is an example of a BAD project capability because it merely exists to activate a design-time experience and does not reflect a genuine capability of the project. If worth keeping at all, this should be a project property instead.
BuildWindowsDesktopTarget
PerPlatformCompilation (aka. #ifdef capability)Indicates that items in this project are compiled individually for every target platform.
MultiTargetIndicates that items in this project may be applied to multiple platforms.
DeploymentProjectIndicates a project that is capable of provisioning Azure resources using Azure Resource Manager that will create an environment for an application.
FabricApplicationIndicates a project that represents a Service Fabric application.
LSJavaScript.v45Indicates a project that represents a LightSwitch JavaScript V4.5 project.
FolderPublishIndicates a project that is capable of publishing the deployment artifacts to a folder.
TestContainerThe project may contain unit tests.
AppDesignerIndicates that the project uses the app designer for managing project properties.
HandlesOwnReloadIndicates that the project can handle a reload by itself (potentially smartly) without the solution doing a full reload of the project when the project file changes on disk.
UseFileGlobsIndicates that the project file can include files using MSBuild file globbing patterns.
EditAndContinueIndicates that the project supports the edit and continue debugging feature.
OpenProjectFileIndicates that the project is capable of handling the project file being edited live in an IDE while the project is already loaded.
DependenciesTreeIndicates that the project supports the dependencies node in Visual Studio.
LaunchProfilesIndicates that the project supports multiple profiles for debugging.
ReferenceManagerAssembliesIndicates that the project will show the Assemblies tab in the Reference manager dialog in Visual Studio.
ReferenceManagerBrowseIndicates that the project will show the Browse button in the Reference manager dialog in Visual Studio.
ReferenceManagerCOMIndicates that the project will show the COM tab in the Reference manager dialog in Visual Studio.
ReferenceManagerProjectsIndicates that the project will show the Projects tab in the Reference manager dialog in Visual Studio.
ReferenceManagerSharedProjectsIndicates that the project will show the Shared Projects tab in the Reference manager dialog in Visual Studio.
ReferenceManagerWinRTIndicates that the project will show the WinRT tab in the Reference manager dialog in Visual Studio.
NoGeneralDependentFileIconIndicates that dependent files should have their own corresponding icons instead of generic one

Summary table

Below is a table that summarizes each capability and popular project types they are declared in:

Legend
UUnconfigured Project scope (capabilities appear in Unconfigured and Configured scopes)
CConfigured Project scope only
Boldalready shipped

Additional discussion

PerPlatformCompilation

Defined by: Shared projects

Summary: Indicates that items in this project are compiled individually for every target platform.

What about when/if XAML gains the ability to have per-platform (or per-form factor) XAML sections? This might be done at runtime or compile time perhaps. We might want to upfront define whether either of these future mechanisms would merit this capability or a new one.

Answer: PerPlatformXamlCompilation may come later.

MultiTarget (aka. Multiplat capability)

Defined by: PCLs and Shared Projects

Summary: Indicates that items in this project may be applied to multiple platforms.

This capability is only present for PCLs that actually target > 1 platform (not a PCL that targets 1).