Skip to content

πŸŽšπŸŽ› Event-Catcher with variety of advanced Actions to service projects, libraries, build processes, runtime environment of the Visual Studio, MSBuild Tools, and …

Switch branches/tags

Latest commit

* FIXED: Fixed "escapedValue" cannot be null. Issue #61.

* FIXED: Fixed `#[Build cancel = true]` and related DTE-Commands.

        In fact it will prevent `Command "Build.Cancel" is not available` for the any context of use.
        This also now will ignore actions from Pre events if they used flag of the ignoring failed build
        (cancel request essentially means the same failure)

* FIXED: Fixed possible "[MSBuild]::GetDirectoryNameOfFileAbove('', sdkmanifest.xml)" cannot be evaluated.

* FIXED: Fixed possible "Project configuration is not found <- sln [Debug|Win32]"

* FIXED: CIM. Fixed support of the: /p:nowarn="1591;1701;1702" key.

* FIXED: Fixed possible (.dmp etc) problem when loading solution: Value cannot be null.

* FIXED: CIM. Fixed MSB4016: An item with the same key has already been added.

* FIXED: Fixed possible stackoverflow in IsolatedEnv & Environment implementations.

* FIXED: VS IDE. Fixed error counter and error list pane when loading incorrect .vssbe then closed solution
         and opened again.

* FIXED: Fixed possible System.TypeInitializationException:
        "The type initializer for 'Microsoft.Build.Evaluation.ToolsetConfigurationReader' threw an exception."

* NEW: Implemented GUI for CIM versions.
       First of all CIM now is part of the main project for CI support!
       And the new CI.GUI module just provides convenient access to scripts and settings without VS IDE.

* NEW: Implemented SolutionConfigurations and SolutionActiveCfg by using MvsSln in IsolatedEnv (API vsSBE part).

* CHANGED: CIM (CI.MSBuild) now is part of the main project for CI support!

* CHANGED: Added .sln search if no arg for CIM.
           Helps to avoid MSB1029 "We can't detect .sln file in arguments" by default.

* CHANGED: `Script` mode is now the default type for new actions.

* CHANGED: Mixing codes from client libraries (API) to the end results for API EventLevel implementation.

* CHANGED: SDK 15 will use .NET Framework: 4.7.2.

* CHANGED: Improved argument processing for CIM. PR #67.
           Both msbuild formats: `/property:` and `-property:`, ...

* CHANGED: Removed logic for upgrading config. Migration 0.8 -> 0.9.
           Please use any related releases before 1.14.1 if you need automatic update.

* CHANGED: .vssbe Minimal version now is 0.12.4 due to removed the "Command" property from config.

* CHANGED: Pack of changes for .vssbe: Component list; Command Property; Default properties;... PR #66.

* CHANGED: API. IEnvironment.ProjectsList now implemented through ISlnResult.ProjectItems (MvsSln).

* CHANGED: Updated the follwoing references:

            * MSBuild 16.6.0 for SDK15 only

            * MvsSln 2.5.3

            * 7z.Libs 19.0.2

            * E-MSBuild 1.14.1

            * GetNuTool 1.8

            * hMSBuild 2.3

            * AvalonEdit 6.0.1

            * Microsoft.VisualStudio.SDK.EmbedInteropTypes 15.0.30

            * Newtonsoft.Json 12.0.3

            * NLog 4.7.2

            * Castle.Core 4.4.1

            * Moq 4.14.5

            * System.Runtime.CompilerServices.Unsafe 4.7.1

            * System.Threading.Tasks.Extensions 4.5.4

            * LSender 1.15

* NOTE: NuGet Packages now provides GUI wrapper to use it completely without VS IDE.
        Access it through GUI.bat helper inside root pkg dir.

* NOTE: You can also receive easily our NuGet Packages through `get-vsSBE.1.14.1.bat` script:
        then access anything with us.

Git stats


Failed to load latest commit information.


πŸŽšπŸŽ› Event-Catcher with variety of advanced Actions to service projects, libraries, build processes, runtime environment of the Visual Studio, MSBuild Tools, and …

Control everything: Visual Studio, MSBuild Tools, CI, and more …

Build status - master VSIX nuget package API LGPLv3 MvsSln GetNuTool SobaScript E-MSBuild

Build history Event model Short Overview

Download (Binaries, Snapshots, Nightly builds, Libraries, ...) / D2 (old releases via sf)


Licensed under the LGPLv3

Copyright (c) 2013-2016,2019-2020  Denis Kuzmin < > GitHub/3F

[ β˜• Donate ]

vsSolutionBuildEvent contributors

We're waiting for your awesome contributions!

Why vsSolutionBuildEvent ?

Advanced handler of the most events from MS Visual Studio & MSBuild tools. Full control and flexible multi-actions for basic pre/post events and other additional such as:

  • CommandEvent, Errors, Warnings, Cancel-Build, Output-Build, Transmitter, Logging

Ability to handle events for all subprojects at once from the whole solution as an Solution-Events or individually for each separately.

Various modes for everything:

Supports Advanced MSBuild & SBE-Scripts engine for your awesome ideas.

Provides CI support (TeamCity, AppVeyor, Azure DevOps, ...), Command-Line mode and lot of other features for convenient work with the builds, tests, versioning, IO operations, and so on. See the documentation.

Scheme of vsSolutionBuildEvent projects

Advanced MSBuild

Through E-MSBuild engine.

$(n = 0)       $(desc = "Hello ")
$(n += 3.14)   $(desc += "from vsSBE !")
$(n += $(n))   $(p1 = " Platform is $(Platform)")
$(...:project) - from selected project in your solution
$$(...) ... $$(...:project)
$(tStart = $([System.DateTime]::Parse("2014/01/01").ToBinary()))

$([System.TimeSpan]::FromTicks($([MSBuild]::Subtract($(tNow), $(tStart))))

$(pdir = $(ProjectDir:project))
$(pdir = $(ProjectDir.Replace('\', '/'):project))

#SobaScript -- Extensible Modular Scripting Programming Language.

    #SobaScript in action
#[var v = 1.2.3]
#[$(log = "$(TMP)/v.txt")]

#[($(Configuration) ~= Deb || true)
    #[var tBase     = $([System.DateTime]::Parse('2019/08/01').ToBinary())]
    #[var tNow      = $([System.DateTime]::UtcNow.Ticks)]
    #[var revBuild  = #[$(
    #[var v = $(v).$([MSBuild]::Modulo($(revBuild), $([System.Math]::Pow(2, 14))))]

#[var v = $([System.String]::Format("v{0}\r\n\t", $(v)))]

    #[File write("#[var log]"):> Example #[var v] Generated by a vsSolutionBuildEvent]
    #[IO scall("notepad", "#[var log]")]
catch(err, msg)
    $(err) - Type of Exception
    $(msg) - Error Message

For example, you can even exclude projects from build at runtime:

#[Build projects.find("name").IsBuildable = false]

Capture data from external utilities:

#[var bSha1 = #[IO sout("git", "rev-parse --short HEAD")]]

Work with files and archives:

#[IO copy.file("$(odir)/notes.txt", "$(pDirCIM)bin\\$(cfg)\\", true)]
#[7z pack.files({
            "$(pDirCIM)bin\$(cfg)\*.txt"}, "$(odir)CI.MSBuild_v$(numCIM)_[$(branchSha1)][$(netStamp)].zip")]

+DTE-commands, +Access to all MSBuild properties on the fly, +Conditional statements and lot of other components:

    #[Box iterate(i = 0; $(i) < 10; i += 1): 
}catch{ }]

#[( #[vsSBE events.Pre.item(1).Enabled] || ($(Configuration) == "Release" && $(sysc)) )
    #[Build projects.find("name").IsBuildable = false]
    #[var bSha1 = #[IO sout("git", "rev-parse --short HEAD")]]

... create new in 5 minutes

Processing modes

From simple commands to C# or even msbuild targets:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="">

    <Target Name="Init">
        <!-- ... -->

        Additional properties:

CommandEvent (DTE)

You can also use this to catch all command from VS IDE. Samples:

$(lcGuid = #[DTE events.LastCommand.Guid])
$(lcId   = #[DTE events.LastCommand.Id])

#[($(lcGuid) == "{1496A755-94DE-11D0-8C3F-00C04FC2AAE2}" && $(lcId) == 1627) {
    #[File scall("notepad", "#[var log]", 30)]

Automatic Version Numbering

See our Wizard for automatic code generation or use any custom scripts.

Various environments

You can easily use this with TeamCity, Azure DevOps, AppVeyor, and any other automated environments:


Solution-wide Build events

Pre-Build / Post-Build events for all projects at once or individually for each separately: configure what you need.

Stop build on first error

Immediately stop (at the same time) after the first appearance (compared with StopOnFirstBuildError plugin [?])


Wiki - Contains help for work with plugins, basic examples, syntax, information for develop, and lot of other...

Feel free to improve any our pages. Click [Edit] button or Start new here.

Questions / Bugs / Suggestions / Source Code



[. . .]