tag:github.com,2008:https://github.com/3F/hMSBuild/releases Release notes from hMSBuild 2025-09-16T17:59:59Z tag:github.com,2008:Repository/87332897/2.5 2025-10-25T00:41:24Z 2.5 <p>🧱 <a href="https://3F.github.io/GetNuTool/releases/latest/gnt/" rel="nofollow"><code>gnt</code></a><code>~hMSBuild</code> | <a href="https://3F.github.io/GetNuTool/releases/latest/gnt/" rel="nofollow"><code>gnt</code></a><code>*hMSBuild</code> | Self updating: <code>hMSBuild -GetNuTool ~hMSBuild/2.5</code></p> <details> <summary>📑 <b>What's new in 2.5 ...</b></summary> <ul> <li> <p>FIXED: Possible infinite self-call recursion due to built-in GetNuTool 1.9+ and hMSBuild invoking itself.<br> Affected all versions with built-in GetNuTool 1.9 (hMSBuild 2.4 and 2.4.1)</p> </li> <li> <p>FIXED: Calling built-in GetNuTool using keys with empty ""<br> e.g. proxycfg="" etc.</p> </li> <li> <p>NEW: Improved security via env protected properties (GetNuTool 1.10+) when using remote vswhere.<br> (without a key -no-vswhere)<br> More about: <a href="https://github.com/3F/GetNuTool?tab=readme-ov-file#tmodes-and-commands">https://github.com/3F/GetNuTool?tab=readme-ov-file#tmodes-and-commands</a><br> Or command: <code>hMSBuild -GetNuTool ~/p:use=documentation</code></p> </li> <li> <p>NEW: hMSBuild.bat edition now fully supports LF and uses this by default instead of CRLF.<br> LF/CRLF of course affects the checksums, hMSBuild -GetNuTool +hMSBuild/2.5<br> * LF (actual): hMSBuild.bat.sha1<br> * CRLF (possible): hMSBuild.bat.crlf.sha1<br> It means .gitattributes control for CRLF in hMSBuild.bat is not necessary anymore in cases when core.autocrlf=input etc.<br> See related: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="231171672" data-permission-text="Title is private" data-url="https://github.com/3F/hMSBuild/issues/2" data-hovercard-type="issue" data-hovercard-url="/3F/hMSBuild/issues/2/hovercard" href="https://github.com/3F/hMSBuild/issues/2">#2</a><br> However, this will not affect users who used the full edition hMSBuild.full.bat<br> (related <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="436407786" data-permission-text="Title is private" data-url="https://github.com/3F/hMSBuild/issues/11" data-hovercard-type="pull_request" data-hovercard-url="/3F/hMSBuild/pull/11/hovercard" href="https://github.com/3F/hMSBuild/pull/11">#11</a>) which is still not protected due to incorrect shiftings in cmd processor when switching to LF.</p> </li> <li> <p>NEW: Full hMSBuild edition access:</p> </li> </ul> <div class="highlight highlight-source-batchfile notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="gnt ~hMSBuild /p:use=full"><pre>gnt ~hMSBuild /p:use=full</pre></div> <div class="highlight highlight-source-batchfile notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="hMSBuild -GetNuTool ~hMSBuild /p:use=full"><pre>hMSBuild -GetNuTool ~hMSBuild /p:use=full</pre></div> <ul> <li>NEW: API. +:eva {in:unevaluated} {out:evaluated} {in:option}</li> </ul> <div class="highlight highlight-source-batchfile notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=":: evaluate argument :eva {in:unevaluated} {out:evaluated} {in:option} :: &amp;(1) - Input via a variable. Use ` to apply &quot; quotes inside &quot;...&quot; if [3]==1. :: *&amp;(2) - Evaluated output via a variable. :: [3] - Option to enable support for extra quotes. Values: 1 == ` as &quot; :: !!0"><pre><span class="pl-c"><span class="pl-c">::</span> evaluate argument</span> :<span class="pl-k">eva</span> {in:unevaluated} {out:evaluated} {in:option} <span class="pl-c"><span class="pl-c">::</span> &amp;(1) - Input via a variable. Use ` to apply " quotes inside "..." if [3]==1.</span> <span class="pl-c"><span class="pl-c">::</span> *&amp;(2) - Evaluated output via a variable.</span> <span class="pl-c"><span class="pl-c">::</span> [3] - Option to enable support for extra quotes. Values: 1 == ` as "</span> <span class="pl-c"><span class="pl-c">::</span> !!0</span></pre></div> <ul> <li>NEW: API. +:inita {in:vname} {in:arguments} {out:index}</li> </ul> <div class="highlight highlight-source-batchfile notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=":: initialize arguments :inita {in:vname} {in:arguments} {out:index} :: (1) - Input variable name. :: &amp;(2) - Input arguments via a variable. :: *&amp;(3) - Returns the reached index (maximum) via a variable. :: !!0"><pre><span class="pl-c"><span class="pl-c">::</span> initialize arguments</span> :<span class="pl-k">inita</span> {in:vname} {in:arguments} {out:index} <span class="pl-c"><span class="pl-c">::</span> (1) - Input variable name.</span> <span class="pl-c"><span class="pl-c">::</span> &amp;(2) - Input arguments via a variable.</span> <span class="pl-c"><span class="pl-c">::</span> *&amp;(3) - Returns the reached index (maximum) via a variable.</span> <span class="pl-c"><span class="pl-c">::</span> !!0</span></pre></div> <ul> <li>NEW: +.pkg.install.bat v1 support in hMSBuild nuget packages.</li> </ul> <div class="highlight highlight-source-batchfile notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="gnt ~hMSBuild"><pre>gnt ~hMSBuild</pre></div> <div class="highlight highlight-source-batchfile notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="gnt *hMSBuild/2.5"><pre>gnt *hMSBuild/2.5</pre></div> <p>Syntax and relevant documentation:<br> * <code>hMSBuild -GetNuTool -help</code><br> * <code>hMSBuild -GetNuTool ~/p:use=documentation</code><br> Or visit <a href="https://github.com/3F/GetNuTool">https://github.com/3F/GetNuTool</a></p> <ul> <li> <p>NEW: Self updating support: hMSBuild -GetNuTool ~hMSBuild/2.5</p> </li> <li> <p>NEW: Added validate.hMSBuild.bat helper to validate core itself.</p> </li> <li> <p>NEW: Added srv.create.bat to prepare local server access.</p> </li> <li> <p>NEW: Official nuget package, hMSBuild:<br> <a href="https://www.nuget.org/packages/hMSBuild/" rel="nofollow">https://www.nuget.org/packages/hMSBuild/</a></p> </li> <li> <p>CHANGED: Default remote vswhere is 3.1.7</p> </li> <li> <p>CHANGED: Updated built-in GetNuTool 1.10.<br> Anniversary (10 years) update GetNuTool 1.10 //github.com/3F<br> adds new modes (install, run, touch, get, grab, pack); custom scripts;<br> improves security; and became even more compact for .bat edition (now 7.87 KB); and ...<br> <a href="https://github.com/3F/GetNuTool/releases/tag/1.10">https://github.com/3F/GetNuTool/releases/tag/1.10</a></p> </li> <li> <p>NOTE: Self validation via command:</p> </li> </ul> <div class="highlight highlight-source-batchfile notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="hMSBuild -GetNuTool ~&amp; svc.gnt -sha1-cmp hMSBuild.bat sha1 -package-as-path"><pre>hMSBuild -GetNuTool ~<span class="pl-k">&amp;</span> svc.gnt -sha1-cmp hMSBuild.bat sha1 -package-as-path</pre></div> </details> 3F tag:github.com,2008:Repository/87332897/2.4.1 2024-02-12T21:09:27Z 2.4.1 <p>hMSBuild 2.4.1 🩹 <code>ESC</code>T/L/E hotfixes</p> <ul> <li>FIXED: Key handling when <code>=</code> sign;<br> Errors like: ..."" was unexpected at this time.</li> </ul> 3F tag:github.com,2008:Repository/87332897/2.4 2024-02-08T18:58:22Z 2.4 <p>hMSBuild 2.4 - <em>.bat scripts with full Package Manager inside for searching and wrapping MSBuild tools</em></p> <details> <summary>📑 <b>What's new in 2.4 ...</b></summary> <ul> <li> <p>FIXED: -GetNuTool is corrupted.</p> </li> <li> <p>FIXED: Fixed delayed return code as !ERRORLEVEL! when -GetNuTool key.</p> </li> <li> <p>NEW: -no-less-4 key to not include versions less than 4.0 (Windows XP+)</p> </li> <li> <p>NEW: -no-less-15 key to not include versions less than 15.0 (install-API/2017+)</p> </li> <li> <p>NEW: ~c {name} Alias to p:Configuration={name}</p> </li> <li> <p>NEW: ~p {name} Alias to p:Platform={name}</p> </li> <li> <p>NEW: ~x Alias to m:NUMBER_OF_PROCESSORS-1 v:m</p> </li> <li> <p>NEW: -vc key. Adds to -priority VC++ toolset.</p> </li> <li> <p>NEW: -cs key. Adds to -priority C# / VB Roslyn compilers.</p> </li> <li> <p>CHANGED: Redirected warn messages into stderr stream.</p> </li> <li> <p>CHANGED: -vsw-priority renamed as <code>-priority</code>.<br> The old key still is available for backward compatibility with 2.x;<br> But marked as obsolete and not recommended to use anymore.</p> </li> <li> <p>CHANGED: -vsw-version renamed as <code>-vwshere</code>.<br> The old key still is available for backward compatibility with 2.x;<br> But marked as obsolete and not recommended to use anymore.</p> </li> <li> <p>CHANGED: Updated GetNuTool 1.9 embeddable package manager inside .bat<br> <a href="https://github.com/3F/GetNuTool/releases/tag/1.9">https://github.com/3F/GetNuTool/releases/tag/1.9</a></p> </li> <li> <p>NOTE: hMSBuild releases are now accompanied by a .sha1 file in the official distribution;<br> At the same time, commits from which releases are published are signed with the committer's verified signature (GPG).</p> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content=" Make sure you are using official, unmodified, safe versions. https://github.com/3F/hMSBuild/releases/latest"><pre class="notranslate"><code> Make sure you are using official, unmodified, safe versions. https://github.com/3F/hMSBuild/releases/latest </code></pre></div> </li> </ul> </details> 3F tag:github.com,2008:Repository/87332897/v2.3 2020-01-29T14:36:24Z v2.3 <p>Public release of the hMSBuild 2.3</p> <p>* NEW: Implemented `-vsw-as "args..."` <br /> Reassigns default commands to vswhere if used.</p> <p> For example: <br /> ``` <br /> hMSBuild -only-path -vsw-as "-products Microsoft.VisualStudio.Product.BuildTools" <br /> ``` <br /> Related Issues: <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/issues/12">#12</a>, <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/issues/14">#14</a>, <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/issues/8">#8</a>,</p> <p>* CHANGED: VS2017+. Using the most modern instance by default. <br /> You can also specify `-vsw-priority` and `-force` keys to use only what is needed. <br /> Related Issues: <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/issues/14">#14</a>, <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/issues/8">#8</a>.</p> <p>* CHANGED: Updated wswhere to 2.8.4 by default.</p> <p>* CHANGED: Updated GetNuTool 1.8 <br /> <a href="https://github.com/3F/GetNuTool/releases/tag/1.8">https://github.com/3F/GetNuTool/releases/tag/1.8</a></p> <p> Most important fix for hMSBuild: <br /> "The remote server returned an error: (407) Proxy Authentication Required." <br /> Related issue: <a class="issue-link js-issue-link" href="https://github.com/3F/DllExport/issues/133">3F/DllExport#133</a></p> <p>* NOTE: An compiled.full version now will be distributed together with official hMSBuild releases. <br /> <a href="https://twitter.com/GitHub3F/status/1218224792970715136">https://twitter.com/GitHub3F/status/1218224792970715136</a> <br /> (zip packages) <a href="https://github.com/3F/hMSBuild/releases">https://github.com/3F/hMSBuild/releases</a></p> 3F tag:github.com,2008:Repository/87332897/v2.2 2019-07-20T16:39:17Z v2.2 <p>Public release of the hMSBuild 2.2</p> <p>* FIXED: Fixed searching from MS BuildTools products. Issue <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/issues/12">#12</a> (Thanks <a class="user-mention notranslate" href="https://github.com/odalet">@odalet</a>).</p> <p>* CHANGED: [VS2017+] hMSBuild will search now in ANY available products. PR <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/pull/13">#13</a> (Thanks <a class="user-mention notranslate" href="https://github.com/odalet">@odalet</a>).</p> <p>* NOTE: In addition to changes above, please use `-vsw-priority` and `-force` keys to use only what is needed. <br /> Issues: <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/issues/8">#8</a>, <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/issues/14">#14</a>.</p> 3F tag:github.com,2008:Repository/87332897/CI-build-41 2019-07-19T18:56:56Z CI-build-41 <p><a href="https://ci.appveyor.com/project/3Fs/hmsbuild/history" rel="nofollow"><code>🎲 Nightly build</code></a> of <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/3F/hMSBuild/commit/c195efd01144e4785b59a80610a8d9a0138b95fd/hovercard" href="https://github.com/3F/hMSBuild/commit/c195efd01144e4785b59a80610a8d9a0138b95fd"><tt>c195efd</tt></a> ➾ Worker image: <code>Visual Studio 2015</code>; Console: <a href="https://ci.appveyor.com/project/3Fs/hmsbuild/build/build-41" rel="nofollow">ci.appveyor.com/.../build-41</a></p> <p><strong>❕</strong> Only for tests <strong>❕</strong> 🗨 Commit message:</p> <p>Merge pull request <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465812863" data-permission-text="Title is private" data-url="https://github.com/3F/hMSBuild/issues/13" data-hovercard-type="pull_request" data-hovercard-url="/3F/hMSBuild/pull/13/hovercard" href="https://github.com/3F/hMSBuild/pull/13">#13</a> from odalet/master</p> <p>Issue <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="465098102" data-permission-text="Title is private" data-url="https://github.com/3F/hMSBuild/issues/12" data-hovercard-type="issue" data-hovercard-url="/3F/hMSBuild/issues/12/hovercard" href="https://github.com/3F/hMSBuild/issues/12">#12</a> / <code>-products *</code></p> 3F tag:github.com,2008:Repository/87332897/v2.1 2019-05-27T17:12:43Z v2.1 <p>Public release of the hMSBuild 2.1</p> <p>* NEW: Support for VS2019 msbuild (Thanks <a class="user-mention notranslate" href="https://github.com/gerhardol">@gerhardol</a>)</p> <p>* CHANGED: Removed possible last extra slash `\` from path, ie. ~ `..\Bin\\MSBuild.exe` <br /> When x32 for searching from Visual Studio with `-notamd64` key. <br /> Part of PR <a class="issue-link js-issue-link" href="https://github.com/3F/hMSBuild/pull/11">#11</a></p> <p>* CHANGED: Default remote vswhere is 2.6.7. <br /> <a href="https://github.com/microsoft/vswhere/releases/tag/2.6.7">https://github.com/microsoft/vswhere/releases/tag/2.6.7</a></p> 3F tag:github.com,2008:Repository/87332897/CI-build-40 2019-05-27T17:07:49Z CI-build-40: Public release of the hMSBuild 2.1 <ul> <li> <p>NEW: Support for VS2019 msbuild (Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gerhardol/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gerhardol">@gerhardol</a>)</p> </li> <li> <p>CHANGED: Removed possible last extra slash <code>\</code> from path, ie. ~ <code>..\Bin\\MSBuild.exe</code><br> When x32 for searching from Visual Studio with <code>-notamd64</code> key.<br> Part of PR <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="436407786" data-permission-text="Title is private" data-url="https://github.com/3F/hMSBuild/issues/11" data-hovercard-type="pull_request" data-hovercard-url="/3F/hMSBuild/pull/11/hovercard" href="https://github.com/3F/hMSBuild/pull/11">#11</a></p> </li> <li> <p>CHANGED: Default remote vswhere is 2.6.7.<br> <a href="https://github.com/microsoft/vswhere/releases/tag/2.6.7">https://github.com/microsoft/vswhere/releases/tag/2.6.7</a></p> </li> </ul> 3F tag:github.com,2008:Repository/87332897/CI-build-39 2019-05-27T14:21:25Z CI-build-39 <p><a href="https://ci.appveyor.com/project/3Fs/hmsbuild/history" rel="nofollow"><code>🎲 Nightly build</code></a> of <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/3F/hMSBuild/commit/d3c297050437379aac8556e57ad717b424a3cdb4/hovercard" href="https://github.com/3F/hMSBuild/commit/d3c297050437379aac8556e57ad717b424a3cdb4"><tt>d3c2970</tt></a> ➾ Worker image: <code>Visual Studio 2015</code>; Console: <a href="https://ci.appveyor.com/project/3Fs/hmsbuild/build/build-39" rel="nofollow">ci.appveyor.com/.../build-39</a></p> <p><strong>❕</strong> Only for tests <strong>❕</strong> 🗨 Commit message:</p> <p>Merge pull request <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="436407786" data-permission-text="Title is private" data-url="https://github.com/3F/hMSBuild/issues/11" data-hovercard-type="pull_request" data-hovercard-url="/3F/hMSBuild/pull/11/hovercard" href="https://github.com/3F/hMSBuild/pull/11">#11</a> from gerhardol/bugfix/fix-10-vs2019</p> <p>Support for VS2019 msbuild (Thanks <a class="user-mention notranslate" data-hovercard-type="user" data-hovercard-url="/users/gerhardol/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/gerhardol">@gerhardol</a>)</p> 3F tag:github.com,2008:Repository/87332897/CI-build-38 2019-04-26T17:18:55Z CI-build-38 <p><a href="https://ci.appveyor.com/project/3Fs/hmsbuild/history" rel="nofollow"><code>🎲 Nightly build</code></a> of <a class="commit-link" data-hovercard-type="commit" data-hovercard-url="https://github.com/3F/hMSBuild/commit/c74ff0505d0ebb9fb0d12384d3e21c16c5ea1e95/hovercard" href="https://github.com/3F/hMSBuild/commit/c74ff0505d0ebb9fb0d12384d3e21c16c5ea1e95"><tt>c74ff05</tt></a> ➾ Worker image: <code>Visual Studio 2015</code>; Console: <a href="https://ci.appveyor.com/project/3Fs/hmsbuild/build/build-38" rel="nofollow">ci.appveyor.com/.../build-38</a></p> <p><strong>❕</strong> Only for tests <strong>❕</strong> 🗨 Commit message:</p> <p>Updated License headers</p> <p>$(APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED)</p> 3F