We have made several breaking changes for the next version of Project System Extensibility. Our goal with these changes is to provide a consistent assembly name over releases, simplified namespaces, and new features. Below is a list of these changes.
We have renamed all of our assemblies to the following:
| Old Name | New Name |
|---|---|
| Microsoft.VisualStudio.ProjectSystem.v14Only | Microsoft.VisualStudio.ProjectSystem |
| Microsoft.VisualStudio.ProjectSystem.VS.v14Only | Microsoft.VisualStudio.ProjectSystem.VS |
Microsoft.VisualStudio.ProjectSystem.Utilities.14.0 has been removed, and its contents merged into the other 2 assemblies.
Namespaces have been heavily refactored.
| New Namespaces |
|---|
| Microsoft.VisualStudio.ProjectSystem |
| Microsoft.VisualStudio.ProjectSystem.Build |
| Microsoft.VisualStudio.ProjectSystem.Debug |
| Microsoft.VisualStudio.ProjectSystem.Properties |
| Microsoft.VisualStudio.ProjectSystem.References |
| Microsoft.VisualStudio.ProjectSystem.VS |
| Microsoft.VisualStudio.ProjectSystem.VS.Build |
| Microsoft.VisualStudio.ProjectSystem.VS.Debug |
| Microsoft.VisualStudio.ProjectSystem.VS.Properties |
In VS2015 update 1 we added some '2' versions of various interfaces. These interfaces have been merged into the original version of the interface.
| Interface Source | Interface Target |
|---|---|
IProjectService2 |
IProjectService |
IProjectTreeFactory2 |
IProjectTreeFactory |
IVsLoggerProvider2 |
IVsLoggerProvider |
IBuildProject2 |
IBuildProject |
IProjectItemProvider2* |
IProjectItemProvider |
* the addition methods from IProjectItemProvider2 where added onto ProjectItemProviderBase
| New | Description |
|---|---|
IProjectTreePropertiesProvider |
New extension point for modifying IProjectTree |
NamedIdentity |
Used for naming and identifiying IProjectValueDataSource |
ProjectTreeFlags |
Replacement for IProjectTree.Capabilities |
IProjectDynamicLoadComponent |
New extension point for components that support being dynamically loaded/unloaded |
IProjectCapabilitiesScope |
Scopes the current capabilities to support dynamic capabilities |
| Removed | Description |
|---|---|
UnconfiguredProjectAutoLoadAttribute |
Replaced by ProjectAutoLoadAttribute |
IProjectTreeModifier |
Replaced by IProjectTreePropertiesProvider |
WeakKeyDictionary |
- |
IProjectCapabilityCheckProvider |
Replaced by IProjectCapabilitiesScope |
ProjectCapabilitiesKeyPropertiesProvider |
- |
IProjectValueDataSource<T>.DataSourceKey |
Appears on IProjectValueDataSource |
IProjectValueDataSource<T>.DataSourceVersion |
Appears on IProjectValueDataSource |
UnconfiguredProject.GetCapabilitiesAsync |
replaced by UnconfiguredProject.Capabilities |
ConfiguredProject.GetCapabilitiesAsync |
replaced by ConfiguredProject.Capabilities |
| Old Name | New Name |
|---|---|
ProjectService |
IProjectService |
UnconfiguredProjectAutoLoad2Attribute |
ProjectAutoLoadAttribute |
OrderPrecedenceAttribute |
OrderAttribute |
IThreadHandling |
IProjectThreadingService |
IThreadHandling.AsyncPump |
IProjectThreadingService.JoinableTaskFactory |
IProjectTree.Capabilities |
IProjectTree.Flags |
IProjectReloader.ReloadIfCapabilitiesChangedAsync |
IProjectReloader.ReloadIfNecessaryAsync |
- Dynamic capability support added. This makes capabilities a part of the data flow. More information can be found here.
- The contract for
ProjectAutoLoadAttribute(previouslyUnconfiguredProjectAutoLoadAttribute) has changed fromvoid Initialize()toTask Initialize() IProjectThreadingService.SwitchToUIThreadis now an extension methodIProjectTree.Flagsis a new structProjectTreeFlagswhich is a hybrid ofenumandImmutableHashSet<string>. Most commonly used flags are found inenum ProjectTreeFlags.Common.ExportCommandGroupAttribute.Groupis now aGuid(formerlystring). The constructor accepts either a string or guid.- Implementation of
IVsProject.IsDocumentInProjectchanged to return not found for items ofDP2_NonMemberand below. Previously it would return true for excluded items underneath the project directory.- You can use
IVsHierarchy.ParseCanonicalNameto check if an item is under the project directory, but may not be included.
- You can use
IProjectSubscriptionService.XXXBlockmarked obsolete. UseIProjectSubscriptionService.XXXSource.SourceBlockinstead.IProjectValueDataSource.DataSourceKeychanged fromGuidto a new classNamedIdentity. This allows for naming the data source with a string.StaticGlobalPropertiesProviderBaseconstructor now takes only anIProjectCommonServices.UnconfiguredProject.CapabilitiesandConfiguredProject.Capabilitiestype changed fromIImmutableSet<string>toIProjectCapabilitiesScope