Event-Catcher with variety of advanced Actions to service projects, libraries, the build processes and processes at runtime from Visual Studio and MSBuild Tools.
Flexible actions for all ...
Download (Binaries, Snapshots, Nightly builds, Libraries, ...)
- VisualStudio Marketplace: Download .vsix
Licensed under the LGPLv3
Copyright (c) 2013-2016,2019 Denis Kuzmin < entry.reg@gmail.com > GitHub/3F
[ ☕ Donate ]
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:
- Files Mode, Operation Mode, Interpreter Mode, Script Mode, Targets Mode, C# Mode
Supports additional MSBuild features & SBE-Scripts engine for your awesome ideas.
Possible work even without Visual Studio.
Provides also support of the CI-Build Servers (TeamCity, AppVeyor, Azure DevOps, ...), Command-Line mode and lot of other features for the convenience of your work with the build, tests, versioning, IO operations, and so on. See the documentation.
- SBE-Scripts
- MSBuild
- Examples - scripts, solutions, syntax etc.,
- Continuous Integration (CI)
- Processing modes
- API
https://vssbe.r-eg.net/doc/Scripts/MSBuild/
#[$(
[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))
https://vssbe.r-eg.net/doc/Scripts/SBE-Scripts/
#["
Basic example
"]
#[var v = 1.2.3]
#[var log = $(TMP)/v.txt]
#[($(Configuration) ~= Deb || true)
{
#[var tBase = $([System.DateTime]::Parse('2015/10/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)))]
#[File write("#[var log]"):> Example #[var v] Generated by vsSolutionBuildEvent]
#[IO scall("notepad", "#[var log]")]
$(n = $([System.Math]::Exp('$([MSBuild]::Multiply($([System.Math]::Log(2)), 16))')))
$(n)
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")]]
...
}]
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>
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)]
}]
See our Wizard for automatic code generation or use any custom scripts.
You can easily use this with TeamCity, Azure DevOps, AppVeyor, and any other automated environments:
...
Pre-Build / Post-Build events for all projects at once or individually for each separately: configure what you need.
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.
Welcome:
[. . .]