gpt4 book ai didi

msbuild - 自定义 MSBuild Exec 任务的系统环境变量路径

转载 作者:行者123 更新时间:2023-12-02 18:22:31 24 4
gpt4 key购买 nike

我正在尝试使用 Exec 任务调用在 MSBuild 过程中获取的批处理脚本。但是,脚本的位置不是路径系统环境变量的一部分。所以我想我可以更新目标内的 Path 属性,然后触发 Exec 任务:

<Target Name="RestoreNPMPackages">
<Message Text="$([System.DateTime]::Now.ToString(&quot;yyyy-MM-dd hh.mm.ss.fff&quot;)) Entering Build.xml Target RestoreNPMPackages..." Importance="high" />

<PropertyGroup>
<Path>$(Path);$(WorkspaceRoot)\Tools\$(Node_jsPackage)</Path>
</PropertyGroup>

<Message Text="Property Path in RestoreNPMPackages=$(Path)" Importance="high" />

<Exec Command="$(Path)\npm install --no-color --no-optional" />

<Message Text="$([System.DateTime]::Now.ToString(&quot;yyyy-MM-dd hh.mm.ss.fff&quot;)) Exiting Build.xml Target RestoreNPMPackages..." Importance="high" />

但是,我收到以下错误

恢复NPM包: 2015-07-27 06.31.24.334 输入 Build.xml 目标 RestoreNPMPackages... RestoreNPMPackages中的属性路径=d:\Delphi Projects\Libraries;C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\PROGRA~1\Borland\Delphi5\Projects\Bpl;C:\PROGRA~1\Borland\vbroker\jre\Bin;C:\PROGRA~1\Borland\vbroker\Bin;C:\PROGRA~1\Borland\Delphi5\Bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C :\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\GNU\GnuPG;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\RealTick\;C:\Program Files (x86)\Graphviz 2.28\bin;D:\PLATFORM\Tools\Eze.Thirdparty.Node.js npm install --no-color --no-可选 “npm”不被识别为内部或外部命令, 可运行的程序或批处理文件。

从消息任务中我可以看到文件夹 D:\PLATFORM\Tools\Eze.Thirdparty.Node.js 已添加到 Path 变量中,但由于某种原因,它提示“npm”未被识别为内部或外部命令

如果我将文件夹 D:\PLATFORM\Tools\Eze.Thirdparty.Node.js 添加到 Windows 中的 Path 变量而不是 MSBuild 脚本中,则该命令将正常运行。当然提前设置Path变量听起来不太灵活。

如何在 MSBuild Exec 任务中动态更新 Path 变量?谢谢

最佳答案

已添加到 Path 变量,它确实已添加,但 Path 是 MsBuild 进程中的一个属性,与 MsBuild 使用的环境变量不同执行任务。您可以验证这一点:

<Exec Command="echo %PATH%"/>

将打印 Exec 使用的 PATH,并且它不会包含您的更改,因为 MsBuild 在使用 Exec 时启动单独的 cmd 进程,并且不会向其传递环境变量。

此外,您执行 npm 的命令是错误的: $(Path)\npm 评估您在问题中显示的所有内容,后跟 \npm (类似于 d:\Delphi Projects\Libraries;C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\PROGRA~1\Borland\Delphi5\Projects\Bpl;C:\PROGRA~1\Borland\vbroker\jre\Bin;C:\PROGRA~1\Borland\vbroker\Bin;C:\PROGRA....\npm) 因此不可能正确

既然你知道 npm 在哪里,你应该直接调用它:

<Exec Command="$(WorkspaceRoot)\Tools\$(Node_jsPackage)\npm"/>

如果由于某种原因 npm 需要将其所在的目录添加到 PATH 中,那么只需像在命令行上那样执行即可:(set PATH=...) & npm 。要为 exec 执行此操作,您需要使用 & 转义 &:

<Exec Command="(set PATH=$(Path)) &amp; npm" />

Path 的修改位置如您的问题所示。更多说明here for instance .

关于msbuild - 自定义 MSBuild Exec 任务的系统环境变量路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31664834/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com