tag:github.com,2008:https://github.com/3F/hMSBuild/releasesRelease notes from hMSBuild2025-09-16T17:59:59Ztag:github.com,2008:Repository/87332897/2.52025-10-25T00:41:24Z2.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}
:: &(1) - Input via a variable. Use ` to apply " quotes inside "..." if [3]==1.
:: *&(2) - Evaluated output via a variable.
:: [3] - Option to enable support for extra quotes. Values: 1 == ` as "
:: !!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> &(1) - Input via a variable. Use ` to apply " quotes inside "..." if [3]==1.</span>
<span class="pl-c"><span class="pl-c">::</span> *&(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.
:: &(2) - Input arguments via a variable.
:: *&(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> &(2) - Input arguments via a variable.</span>
<span class="pl-c"><span class="pl-c">::</span> *&(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 ~& svc.gnt -sha1-cmp hMSBuild.bat sha1 -package-as-path"><pre>hMSBuild -GetNuTool ~<span class="pl-k">&</span> svc.gnt -sha1-cmp hMSBuild.bat sha1 -package-as-path</pre></div>
</details>3Ftag:github.com,2008:Repository/87332897/2.4.12024-02-12T21:09:27Z2.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>3Ftag:github.com,2008:Repository/87332897/2.42024-02-08T18:58:22Z2.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>3Ftag:github.com,2008:Repository/87332897/v2.32020-01-29T14:36:24Zv2.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>3Ftag:github.com,2008:Repository/87332897/v2.22019-07-20T16:39:17Zv2.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>3Ftag:github.com,2008:Repository/87332897/CI-build-412019-07-19T18:56:56ZCI-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>3Ftag:github.com,2008:Repository/87332897/v2.12019-05-27T17:12:43Zv2.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>3Ftag:github.com,2008:Repository/87332897/CI-build-402019-05-27T17:07:49ZCI-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>3Ftag:github.com,2008:Repository/87332897/CI-build-392019-05-27T14:21:25ZCI-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>3Ftag:github.com,2008:Repository/87332897/CI-build-382019-04-26T17:18:55ZCI-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