GithubHelp home page GithubHelp logo

emaf / vsprojectsystem Goto Github PK

View Code? Open in Web Editor NEW

This project forked from microsoft/vsprojectsystem

0.0 0.0 0.0 765 KB

Documentation for extending Visual Studio with new types of projects.

License: Other

vsprojectsystem's Introduction

Visual Studio Project System Extensibility Documentation

What is a project system?

A project system sits between a project file on disk (for example, .csproj and .vbproj) and various Visual Studio features including, but not limited to, Solution Explorer, designers, the debugger, language services, build and deployment. Almost all interaction that occurs with files contained in a project file, happens through the project system.

There are three reasons to extend a project system in Visual Studio:

  1. Support a new project file format.
  2. Integrate existing file format with a new language service.
  3. Customize behavior of an existing project system.

Project system extensibility

The traditional way to a build or customize a project system is to implement a set of Project System COM interfaces. Most project systems don't start from scratch. Instead, they leverage the MPFProj project system example as a starting point.

The Visual Studio Project System (VSPS) described in this repository provides default implementation for a subset of project system COM interfaces. This simplifies building and maintaining a project system, but comes with the cost of reduced functionality.

How to select a project system platform?

Scenario Recommended Project System Platform
Customize C#/VB/F# Desktop project system COM-based project flavoring.
Customize C#/VB/F# .NET Core project system Not fully supported at this time. VSPS is your best bet.
Add new a project type or a language Prototype with VSPS, but be ready to fall back to MPFProj for complex scenarios that VSPS doesn't support yet.

Compare MPFProj and Visual Studio Project System

Criteria MPFProj Visual Studio Project System (this repo)
Maturity Release Preview
Breaking changes in major updates None Expected
Flexibility Full control over project system behavior. Some project system interfaces are not implemented.
Complexity High: You will need to understand all project interfaces. Low: You only need to understand customized behavior.
Extensibility Implements project system COM interfaces. C# with managed interfaces for extension points and MEF.
Threading model Single threaded and bound to the UI thread. Multi-threaded, scalable, and responsive.
Scalability Memory-optimized Uses extra memory to support multi-threading.
Methodology Provides templates that implement project interfaces. The project system can modify or add to these templates. Locks down project system interfaces and allows to override some behaviors.
Used by project systems Desktop C#/VB/F# .NET Core C#/VB/F# and C++
Minimum Supported Version Visual Studio 2008 Visual Studio 2015 (some APIs are not available in older versions and there are breaking changes in major versions)

Visual Studio Project System

Visual Studio can be extended in many ways, including adding new types of projects and augmenting existing ones. This repository contains the documentation and best practices for creating extensions that add new project types to Visual Studio. We welcome community input if you wish to contribute new topics or find any issues.

To get started, read the introduction while you're waiting for the pre-requisites to install.

Please file any product bugs you find on Developer Community. You may file doc bugs here.

Join the chat at https://gitter.im/Microsoft/extendvs

For the latest features take a look at Changes.

For further information about extending Visual Studio in other ways please check out VisualStudio.com/integrate.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

vsprojectsystem's People

Contributors

aarnott avatar abpiskunov avatar adrianvmsft avatar alfredmyers avatar bertique avatar changsi-an avatar chwarr avatar davidwengier avatar davjs avatar davkean avatar drewnoakes avatar enricosada avatar gitter-badger avatar gusper avatar hmemcpy avatar jviau avatar kirillosenkov avatar kzu avatar lifengl avatar markpflug avatar pajdzik avatar srivatsn avatar tmat avatar vijayrkn avatar viktorveis avatar willbuik avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.