官术网_书友最值得收藏!

Publishing NuGet package and VSIX for an analyzer project

We will show you how to configure, build, and publish a NuGet package and a VSIX package for an analyzer project created in Visual Studio 2017 using the .NET Compiler platform SDK.

Before we start digging into these topics, let's understand the difference between NuGet-based analyzer packages and VSIX-based analyzer packages. NuGet and VSIX are basically two different packaging schemes for the Microsoft development platform to package files such as assemblies, resources, build targets, tools, and so on, into a single installable package.

  • NuGet is a more generic packaging scheme. NuGet packages (.nupkg files) can be directly referenced in .NET projects and installed to a specific project or solution using the NuGet package manager in Visual Studio. Analyzer NuGet packages based on the analyzer template project get installed as AnalyzerReferences in the project file, and then get passed onto the compiler command line to be executed during build. Additionally, AnalyzerReferences are resolved at design time by the Visual Studio IDE and executed while code editing to generate live diagnostics.
  • A VSIX package is a .vsix file that contains one or more Visual Studio extensions, together with the metadata Visual Studio uses to classify and install the extensions. An analyzer VSIX package can be installed machine-wide or to a specific extension hive, and is enabled for all projects/solutions opened from the Visual Studio hive. Unlike a NuGet package, it cannot be installed specifically to a project/solution and does not travel along with the project sources.
As of Visual Studio 2017, analyzers installed as AnalyzerReferences via NuGet packages execute during both: command line builds and live code editing in Visual Studio. Analyzers installed via Analyzer VSIX packages execute only during live code editing in Visual Studio and not during project build. Hence, only analyzer NuGet packages can be configured to execute in continuous integration (CI) build systems and break the build.
主站蜘蛛池模板: 塘沽区| 静海县| 南投市| 静宁县| 章丘市| 蒙自县| 巫溪县| 通渭县| 鄂伦春自治旗| 呼玛县| 独山县| 奉贤区| 兴义市| 东乡族自治县| 宜城市| 伊金霍洛旗| 泽普县| 民丰县| 湟中县| 孟村| 土默特左旗| 漳州市| 龙州县| 黎平县| 自贡市| 乐昌市| 江陵县| 宁波市| 柳河县| 靖宇县| 彩票| 榆林市| 诸城市| 昭平县| 东明县| 隆尧县| 佛坪县| 雷波县| 阿城市| 永德县| 沿河|