「 ❤ 」 ![LGPLv3](https://img.shields.io/badge/LGPLv3-008033.png)
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.
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://3F.github.io/web.vsSBE/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)]
}]
![](https://3F.github.io/web.vsSBE/doc/Resources/examples/CommandEvent.gif)
Automatic Version Numbering
See our Wizard for automatic code generation or use any custom scripts.
![](https://3F.github.io/web.vsSBE/doc/Resources/examples/VersionClass.gif)
Various environments
You can easily use this with TeamCity, Azure DevOps, AppVeyor, and any other automated environments:
![](https://3F.github.io/web.vsSBE/doc/Resources/ci_example_appveyor.png)
![](https://3F.github.io/web.vsSBE/doc/Resources/CI.MSBuild_example_TC.png)
![](https://3F.github.io/web.vsSBE/doc/Resources/CI.MSBuild_example_console.png)
![](https://3F.github.io/web.vsSBE/doc/Resources/Demo/DemoClient.png)
...
Solution-wide Build events
Pre-Build / Post-Build events for all projects at once or individually for each separately: configure what you need.
![](https://3F.github.io/web.vsSBE/doc/Resources/examples/obsolete/vbs_ext.jpg)
Stop build on first error
Immediately stop (at the same time) after the first appearance (compared with StopOnFirstBuildError plugin [?])
![](https://3F.github.io/web.vsSBE/doc/Resources/examples/stop_build.png)
Screenshots
![](https://3F.github.io/web.vsSBE/doc/Resources/Screenshots/UI-State_panel.png)
![](https://3F.github.io/web.vsSBE/doc/Resources/Screenshots/main_v0.12.png)
![](media/scr/Automatic_Version_Numbering.png)
[. . .]
Wiki
Read or Edit