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 …

master
Go to file
Code

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
              https://www.nuget.org/packages/Microsoft.Build/16.6.0

            * MvsSln 2.5.3
              https://github.com/3F/MvsSln/releases/tag/2.5.3

            * 7z.Libs 19.0.2
              https://github.com/3F/7z.Libs/releases/tag/19.0.2

            * E-MSBuild 1.14.1
              https://github.com/3F/E-MSBuild/releases/tag/1.14.1

            * GetNuTool 1.8
              https://github.com/3F/GetNuTool/releases/tag/1.8

            * hMSBuild 2.3
              https://github.com/3F/hMSBuild/releases/tag/v2.3

            * AvalonEdit 6.0.1
              https://github.com/icsharpcode/AvalonEdit/releases/tag/v6.0.1

            * Microsoft.VisualStudio.SDK.EmbedInteropTypes 15.0.30
              https://aka.ms/VsExtensibility

            * Newtonsoft.Json 12.0.3
              https://github.com/JamesNK/Newtonsoft.Json/releases/tag/12.0.3

            * NLog 4.7.2
              https://github.com/NLog/NLog/releases/tag/v4.7.2

            * Castle.Core 4.4.1
              https://github.com/castleproject/Core/releases/tag/v4.4.1

            * Moq 4.14.5
              https://github.com/moq/moq4/releases/tag/v4.14.5

            * System.Runtime.CompilerServices.Unsafe 4.7.1
              https://go.microsoft.com/fwlink/?LinkID=799421

            * System.Threading.Tasks.Extensions 4.5.4
              https://go.microsoft.com/fwlink/?LinkID=799421

            * LSender 1.15
            https://github.com/3F/LSender/releases/tag/1.15

* NOTE: NuGet Packages now provides GUI wrapper to use it completely without VS IDE.

        https://www.nuget.org/packages/vsSolutionBuildEvent
        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:

        https://github.com/3F/vsSolutionBuildEvent/releases
        then access anything with us.
014f49a

Git stats

Files

Permalink
Failed to load latest commit information.

README.md

vsSolutionBuildEvent

πŸŽšπŸŽ› 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)

License

Licensed under the LGPLv3

Copyright (c) 2013-2016,2019-2020  Denis Kuzmin < x-3F@outlook.com > GitHub/3F

[ β˜• Donate ]

vsSolutionBuildEvent contributors https://github.com/3F/vsSolutionBuildEvent/graphs/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.

#[$(
    [System.Math]::Exp('$(
        [MSBuild]::Multiply(
            $([System.Math]::Log(10)), 
            4
        ))'
    )
)]
$(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.Guid]::NewGuid())

$([System.TimeSpan]::FromTicks($([MSBuild]::Subtract($(tNow), $(tStart))))
                        .TotalHours.ToString("0"))

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

#SobaScript

https://github.com/3F/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  = #[$(
        [System.TimeSpan]::FromTicks('$(
            [MSBuild]::Subtract(
            $(tNow), 
            $(tBase))
        )')
        .TotalMinutes
        .ToString('0')
    )]]
    
    #[var v = $(v).$([MSBuild]::Modulo($(revBuild), $([System.Math]::Pow(2, 14))))]
}]

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

#[try
{ 
    #[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({
            "$(pDirBridge)bin\$(cfg)\Bridge.*.*",
            "CI.MSBuild.dll",
            "CI.MSBuild.pdb",
            "$(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:

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

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

... create new in 5 minutes

Processing modes

https://vssbe.r-eg.net/doc/Modes/

From simple commands to C# or even msbuild targets:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

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

    <!--
        Additional properties:
            $(ActionName)
            $(BuildType)
            $(EventType)
            $(SupportMSBuild)
            $(SupportSBEScripts)
            $(SolutionActiveCfg)
            $(StartupProject)
    -->
</Project>

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

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

Welcome:

Screenshots

[. . .]

You can’t perform that action at this time.