An extension for VS Code that provides intellisense for MSBuild project files, including auto-complete for <PackageReference>
elements.
The language service used by this extension can be found here: tintoy/msbuild-project-tools-server
Note: there are features in the extension (marked "language service feature" below) that use an out-of-process language service; this is enabled by default but if all you want is PackageReference
completion, you can disable the language service by setting msbuildProjectTools.language.enable
to false
in your VSCode preferences. You will need to reload VSCode after changing this setting.
You need .NET Core 2.0.0 or newer installed to use the language service (but your projects can target any version you have installed).
- Completions for
PackageReference
andDotNetCliToolReference
.- Completions for
Include
andVersion
attributes of these items (invoke theNuGet: toggle pre-release
command to include / exclude pre-release packages / package versions). - Language service feature: Completions to create these elements.
- Completions for
- Language service feature: Completions for common top-level elements (e.g.
PropertyGroup
,ItemGroup
,Target
). - Language service feature: Completions for property elements.
- Language service feature: Completions for item elements.
- Language service feature: Completions for common item attributes.
- Language service feature: Completions for common property
Condition
attributes. - Language service feature: Hover the mouse over imports, targets, items, properties, and conditions to see information about them.
- Language service feature: Document symbols are supported for imports, targets, items, and properties.
- Language service feature: Go-to-definition is implemented for both SDK-style and regular project imports.
- Basic syntax highlighting of MSBuild expressions in attribute values.
To see this highlighting, change the editor language fromXML
toMSBuild
. - Language service feature: Completions for
$()
property,@()
item, and%()
item metadata expressions (experimental).
To enable these completions, add the stringexpressions
to themsbuildProjectTools.language.experimentalFeatures
setting, then change the editor language fromXML
toMSBuild
. - Language service feature: Completions for task elements and attributes based on metadata for tasks declared in the project and its imported projects (experimental).
To enable these completions, add the stringTasks
to themsbuildProjectTools.language.completionsFromProject
setting.
By default, the language service is automatically available for files with the following extensions:
*.*proj
.targets
.props
.tasks
If you want to use it with additional file types:
- Open the desired file.
- Change the language mode by pressing
Ctrl-Shift-P
(orCmd-Shift-P
on Mac) and choosing "Change Language Mode".
- Choose "configure file association".
- Choose language
MSBuild
.
You can install this extension from the VS marketplace, or simply download the VSIX package for the latest release and install it by choosing "Install from VSIX" from the menu on the top right of the extensions panel.
See BUILDING.md.
See architectural overview for details (this is a work-in-progress; if you have questions, feel free to create an issue).
- Support for task completions is experimental; if you find a problem with it, please create an issue.
- Support for MSBuild expressions is experimental; if you find a problem with it, please create an issue.
- If you open more than one project at a time (or navigate to imported projects), subsequent projects will be loaded into the same MSBuild project collection as the first project. Once you have closed the last project file, the next project file you open will become the master project. The master project will become selectable in a later release.
If you have questions, feedback, feature requests, or would like to report a bug, please feel free to reach out by creating an issue. When reporting a bug, please try to include as much information as possible about what you were doing at the time, what you expected to happen, and what actually happened.
If you're interested in collaborating that'd be great, too :-)