{"id":16974827,"url":"https://github.com/3f/vssolutionbuildevent","last_synced_at":"2025-07-23T03:08:22.481Z","repository":{"id":14979947,"uuid":"17705084","full_name":"3F/vsSolutionBuildEvent","owner":"3F","description":"🎛 Event-Catcher with variety of advanced Actions to service projects, libraries, build processes, runtime environment of the Visual Studio, MSBuild Tools, and …","archived":false,"fork":false,"pushed_at":"2024-05-24T23:32:12.000Z","size":6069,"stargazers_count":83,"open_issues_count":4,"forks_count":23,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-06-26T13:48:37.041Z","etag":null,"topics":["automation","build","build-automation","ci","compiler","e-msbuild","envdte","events","getnutool","msbuild","plugin","sbe-scripts","scripts","sevenzip","sobascript","tools","visual-studio","vsix","vssbe","vssolutionbuildevent"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"asLody/VirtualApp","license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/3F.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.txt","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"custom":["3F.github.io/fund"]}},"created_at":"2014-03-13T09:46:51.000Z","updated_at":"2025-06-12T16:38:57.000Z","dependencies_parsed_at":"2024-12-16T13:31:30.349Z","dependency_job_id":"0311c218-9ad1-4e1f-b6e6-ad092a62dbc9","html_url":"https://github.com/3F/vsSolutionBuildEvent","commit_stats":{"total_commits":448,"total_committers":4,"mean_commits":112.0,"dds":0.1316964285714286,"last_synced_commit":"82845618c7d144e356faf7cef650f8489c3128fb"},"previous_names":[],"tags_count":67,"template":false,"template_full_name":null,"purl":"pkg:github/3F/vsSolutionBuildEvent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3F%2FvsSolutionBuildEvent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3F%2FvsSolutionBuildEvent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3F%2FvsSolutionBuildEvent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3F%2FvsSolutionBuildEvent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3F","download_url":"https://codeload.github.com/3F/vsSolutionBuildEvent/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3F%2FvsSolutionBuildEvent/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266609397,"owners_count":23955629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","build","build-automation","ci","compiler","e-msbuild","envdte","events","getnutool","msbuild","plugin","sbe-scripts","scripts","sevenzip","sobascript","tools","visual-studio","vsix","vssbe","vssolutionbuildevent"],"created_at":"2024-10-14T01:08:20.472Z","updated_at":"2025-07-23T03:08:22.458Z","avatar_url":"https://github.com/3F.png","language":"C#","readme":"[![](https://raw.githubusercontent.com/3F/vsSolutionBuildEvent/master/vsSolutionBuildEvent/Resources/Package.png)](https://github.com/3F/vsSolutionBuildEvent) [**vsSolutionBuildEvent**](https://github.com/3F/vsSolutionBuildEvent)\n\n**Control everything: Visual Studio, MSBuild Tools, CI, and more …**\n\n🎛 *Event*-Catcher with variety of advanced *Actions* to service projects, libraries, build processes, runtime environment of the Visual Studio, MSBuild Tools, and … \n\n```r\nCopyright (c) 2013-2024  Denis Kuzmin \u003cx-3F@outlook.com\u003e github/3F\n```\n\n[ 「 ❤ 」 ](https://3F.github.io/fund) [![LGPLv3](https://img.shields.io/badge/LGPLv3-008033.svg)](LICENSE)\n[![Download](https://img.shields.io/github/release/3F/vsSolutionBuildEvent.svg)](https://github.com/3F/vsSolutionBuildEvent/releases/latest)\n[![Marketplace](https://img.shields.io/badge/dynamic/xml?color=6C2C7C\u0026label=Marketplace\u0026query=//text()\u0026url=https://raw.githubusercontent.com/3F/vsSolutionBuildEvent/master/.version)](https://marketplace.visualstudio.com/items?itemName=GitHub3F.vsSolutionBuildEvent-11615)\n[![nuget](https://img.shields.io/nuget/v/vsSolutionBuildEvent.svg)](https://www.nuget.org/packages/vsSolutionBuildEvent/)\n\n[![Build status - master](https://ci.appveyor.com/api/projects/status/l38xn0j2c5an28e1/branch/master?svg=true)](https://ci.appveyor.com/project/3Fs/vssolutionbuildevent/branch/master)\n[![GetNuTool](https://img.shields.io/badge/🧩-GetNuTool-93C10B)](https://github.com/3F/GetNuTool)\n[![SobaScript](https://img.shields.io/badge/🧩-SobaScript-8E5733)](https://github.com/3F/SobaScript)\n[![E-MSBuild](https://img.shields.io/badge/🧩-E--MSBuild-C8597A)](https://github.com/3F/E-MSBuild)\n[![MvsSln](https://img.shields.io/badge/🧩-MvsSln-865FC5)](https://github.com/3F/MvsSln)\n\n[![Build history](https://buildstats.info/appveyor/chart/3Fs/vssolutionbuildevent?buildCount=20\u0026showStats=true)](https://ci.appveyor.com/project/3Fs/vssolutionbuildevent/history)\n\n## Why vsSolutionBuildEvent\n\nAdvanced handler of the most **events** from MS Visual Studio \u0026 MSBuild tools. Full control and flexible multi-**actions** for basic pre/post events and other additional such as:\n\n* [CommandEvent](https://3F.github.io/web.vsSBE/doc/Events/CommandEvent/), Errors, Warnings, Cancel-Build, Output-Build, Transmitter, Logging\n\nAbility to handle events for all subprojects at once from the whole solution as an Solution-Events or individually for each separately.\n\nVarious modes for everything:\n\n* Files Mode, Operation Mode, Interpreter Mode, [Script Mode](https://3F.github.io/web.vsSBE/doc/Modes/Script/), [Targets Mode](https://3F.github.io/web.vsSBE/doc/Modes/Targets/), [C# Mode](https://3F.github.io/web.vsSBE/doc/Modes/CSharp/)\n\nSupports [Advanced MSBuild](https://3F.github.io/web.vsSBE/doc/Scripts/MSBuild/) \u0026 [SBE-Scripts engine](https://3F.github.io/web.vsSBE/doc/Scripts/SBE-Scripts/) for your awesome ideas.\n\nProvides 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.\n\n* [SBE-Scripts](https://3F.github.io/web.vsSBE/doc/Scripts/SBE-Scripts/)\n* [E-MSBuild](https://3F.github.io/web.vsSBE/doc/Scripts/MSBuild/)\n* **[Examples](https://3F.github.io/web.vsSBE/doc/Examples/)** *- scripts, solutions, syntax etc.,*\n* [Continuous Integration (CI)](https://3F.github.io/web.vsSBE/doc/CI/)\n* [Processing modes](https://3F.github.io/web.vsSBE/doc/Modes/)\n* [API](https://3F.github.io/web.vsSBE/doc/API/)\n\n[![Scheme of vsSolutionBuildEvent projects](https://3F.github.io/web.vsSBE/doc/Resources/scheme.png)](https://3F.github.io/web.vsSBE/doc/Scheme/)\n\n[![Event model](https://3F.github.io/web.vsSBE/doc/Resources/events_model_small.png)](#)\n\n* [Install \u0026 Build](https://3F.github.io/web.vsSBE/doc/Dev/How-to-build/) ([Developer Zone](https://3F.github.io/web.vsSBE/doc/Dev/))\n* [Wiki](https://3F.github.io/web.vsSBE/) - read or edit\n\n\n## Advanced MSBuild \n\nThrough [E-MSBuild](https://github.com/3F/E-MSBuild) engine.\n\n```js\n#[$(\n    [System.Math]::Exp('$(\n        [MSBuild]::Multiply(\n            $([System.Math]::Log(10)), \n            4\n        ))'\n    )\n)]\n```\n\n```js\n$(n = 0)       $(desc = \"Hello \")\n$(n += 3.14)   $(desc += \"from vsSBE !\")\n$(n += $(n))   $(p1 = \" Platform is $(Platform)\")\n```\n\n```js\n$(...)\n$(...:project) - from selected project in your solution\n$$(...) ... $$(...:project)\n```\n\n```js\n$(tStart = $([System.DateTime]::Parse(\"2014/01/01\").ToBinary()))\n$([System.Guid]::NewGuid())\n\n$([System.TimeSpan]::FromTicks($([MSBuild]::Subtract($(tNow), $(tStart))))\n                        .TotalHours.ToString(\"0\"))\n\n$(pdir = $(ProjectDir:project))\n$(pdir = $(ProjectDir.Replace('\\', '/'):project))\n```\n\n## #SobaScript ##\n\nhttps://github.com/3F/SobaScript -- Extensible Modular Scripting Programming Language.\n\n```js\n#[\"\n    #SobaScript in action\n\"]\n\njust a regular text between\n\n#[$(v = 1.2.3)]\n#[$(log = \"$(TMP)/v.txt\")]\n\n#[($(Configuration) ~= Deb || true)\n{\n    #[var tBase     = $([System.DateTime]::Parse('2019/08/01').ToBinary())]\n    #[var tNow      = $([System.DateTime]::UtcNow.Ticks)]\n    #[var revBuild  = #[$(\n        [System.TimeSpan]::FromTicks('$(\n            [MSBuild]::Subtract(\n            $(tNow), \n            $(tBase))\n        )')\n        .TotalMinutes\n        .ToString('0')\n    )]]\n    \n    #[var v = $(v).$([MSBuild]::Modulo($(revBuild), $([System.Math]::Pow(2, 14))))]\n}]\n\n#[var v = $([System.String]::Format(\"v{0}\\r\\n\\t\", $(v)))]\n\n#[try\n{ \n    #[File write(\"#[var log]\"):\u003e Example #[var v] Generated by a vsSolutionBuildEvent]\n    #[IO scall(\"notepad\", \"#[var log]\")]\n}\ncatch(err, msg)\n{\n    $(err) - Type of Exception\n    $(msg) - Error Message\n}]\n\n#[Box iterate(i = 0; $(loop); i += 1): #[try\n{\n    ...\n}\ncatch { $(loop = false) }] ]\n```\n\nFor example, you can exclude projects from build at runtime:\n\n```js\n#[Build projects.find(\"name\").IsBuildable = false]\n``` \n\nCapture data from external utilities:\n\n```js\n#[var bSha1 = #[IO sout(\"git\", \"rev-parse --short HEAD\")]]\n```\n\nDo callable actions with arguments:\n\n```js\n#[$(shaListDir = $(dbin))] #[$(searchSubDirs = '0')]\n#[Core events.Post.item(\"ShaList\").run()]\n```\n\nWork with files and archives:\n\n```js\n#[IO copy.file(\"$(odir)/notes.txt\", \"$(pDirCIM)bin\\\\$(cfg)\\\\\", true)]\n#[7z pack.files({\n            \"$(pDirBridge)bin\\$(cfg)\\Bridge.*.*\",\n            \"CI.MSBuild.dll\",\n            \"CI.MSBuild.pdb\",\n            \"$(pDirCIM)bin\\$(cfg)\\*.txt\"}, \"$(odir)CI.MSBuild_v$(numCIM)_[$(branchSha1)][$(netStamp)].zip\")]\n\n```\n\n+DTE-commands, +Access to all MSBuild properties on the fly, +Conditional statements and lot of other components:\n\n```js\n#[try\n{\n    #[Box iterate(i = 0; $(i) \u003c 10; i += 1): \n        ...\n    ]\n}catch{ }]\n\n#[( #[vsSBE events.Pre.item(1).Enabled] || ($(Configuration) == \"Release\" \u0026\u0026 $(sysc)) )\n{\n    #[Build projects.find(\"name\").IsBuildable = false]\n}\nelse\n{\n    #[var bSha1 = #[IO sout(\"git\", \"rev-parse --short HEAD\")]]\n    ...\n}]\n```\n\n... [create **new** in 5 minutes](https://3F.github.io/web.vsSBE/doc/Dev/New%20Component/)\n\n## Processing modes\n\n[https://3F.github.io/web.vsSBE/doc/Modes/](https://3F.github.io/web.vsSBE/doc/Modes/)\n\nFrom simple commands to C# or even msbuild targets:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\"?\u003e\n\u003cProject ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\"\u003e\n\n    \u003cTarget Name=\"Init\"\u003e\n        \u003c!-- ... --\u003e\n    \u003c/Target\u003e\n\n    \u003c!--\n        Additional properties:\n            $(ActionName)\n            $(BuildType)\n            $(EventType)\n            $(SupportMSBuild)\n            $(SupportSBEScripts)\n            $(SolutionActiveCfg)\n            $(StartupProject)\n    --\u003e\n\u003c/Project\u003e\n```\n\n## CommandEvent (DTE)\n\nYou can also use this to catch all command from VS IDE. [Samples:](https://3F.github.io/web.vsSBE/doc/Events/CommandEvent/)\n\n```js\n$(lcGuid = #[DTE events.LastCommand.Guid])\n$(lcId   = #[DTE events.LastCommand.Id])\n\n#[($(lcGuid) == \"{1496A755-94DE-11D0-8C3F-00C04FC2AAE2}\" \u0026\u0026 $(lcId) == 1627) {\n    #[File scall(\"notepad\", \"#[var log]\", 30)]\n}]\n```\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/examples/CommandEvent.gif)\n\n## Automatic Version Numbering\n\nSee our [**Wizard** for automatic code generation **or** use any **custom scripts**.](https://3F.github.io/web.vsSBE/doc/Examples/Version/)\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/examples/VersionClass.gif)\n\n## Various environments\n\nYou can easily use this with TeamCity, Azure DevOps, AppVeyor, and any other automated environments:\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/ci_example_appveyor.png)\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/CI.MSBuild_example_TC.png)\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/CI.MSBuild_example_console.png)\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/Demo/DemoClient.png)\n\n...\n\n## Solution-wide Build events\n\nPre-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/Features/Solution-wide/)\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/examples/obsolete/vbs_ext.jpg)\n\n## Stop build on first error\n\n[Immediately stop](https://3F.github.io/web.vsSBE/doc/Examples/Errors.Stop%20build/) (at the same time) after the first appearance (compared with StopOnFirstBuildError plugin [[?]](https://3F.github.io/web.vsSBE/doc/Examples/Errors.Stop%20build/))\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/examples/stop_build.png)\n\n## Wiki\n\n[Wiki](https://3F.github.io/web.vsSBE/) - Examples, syntax, developer zone, and other ...\n\nFeel free to improve any pages. Click [Edit] button or [Start new here.](https://3F.github.io/web.vsSBE/doc/New/)\n\n## Screenshots\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/Screenshots/UI-State_panel.png)\n\n![](https://3F.github.io/web.vsSBE/doc/Resources/Screenshots/main_v0.12.png)\n\n![](media/scr/Automatic_Version_Numbering.png)\n\n[**[. . .](https://3F.github.io/web.vsSBE/Screenshots/)**]","funding_links":["3F.github.io/fund"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3f%2Fvssolutionbuildevent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3f%2Fvssolutionbuildevent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3f%2Fvssolutionbuildevent/lists"}