自定义MSBuild Exec任务的系统环境变量路径
我正在尝试使用Exec任务调用在MSBuild过程中获取的批处理脚本。但是,脚本的位置不是path系统环境变量的一部分。因此,我想我可以更新目标中的Path属性,然后触发Exec任务:自定义MSBuild Exec任务的系统环境变量路径,msbuild,Msbuild,我正在尝试使用Exec任务调用在MSBuild过程中获取的批处理脚本。但是,脚本的位置不是path系统环境变量的一部分。因此,我想我可以更新目标中的Path属性,然后触发Exec任务: <Target Name="RestoreNPMPackages"> <Message Text="$([System.DateTime]::Now.ToString("yyyy-MM-dd hh.mm.ss.fff")) Entering Build.x
<Target Name="RestoreNPMPackages">
<Message Text="$([System.DateTime]::Now.ToString("yyyy-MM-dd hh.mm.ss.fff")) 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("yyyy-MM-dd hh.mm.ss.fff")) Exiting Build.xml Target RestoreNPMPackages..." Importance="high" />
$(路径)$(WorkspaceRoot)\Tools\$(节点\u jsPackage)
但是,我得到了以下错误
恢复性包装:
2015-07-27 06.31.24.334进入Build.xml目标恢复包。。。
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:\ProgramFiles(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:\ProgramFiles(x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\ProgramFiles(x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateSassemblies\;C:\ProgramFiles(x86)\Microsoft SQL Server\100\DTS\Binn\;C:\ProgramFiles(x86)\GNU\GnuPG;C:\Program Files\Microsoft\Web平台安装程序\;C:\ProgramFiles(x86)\Microsoft ASP.NET\ASP.NET网页\v1.0\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\RealTick\;C:\ProgramFiles(x86)\Graphviz 2.28\bin;D:\PLATFORM\Tools\Eze.Thirdparty.Node.js
npm安装--无颜色--无可选
“npm”未被识别为内部或外部命令,
可操作的程序或批处理文件
从消息任务中,我可以看到文件夹D:\PLATFORM\Tools\Eze.Thirdparty.Node.js已添加到Path变量中,但由于某些原因,它抱怨“npm”未被识别为内部或外部命令
如果将文件夹D:\PLATFORM\Tools\Eze.Thirdparty.Node.js添加到Windows中的Path变量而不是MSBuild脚本中,则该命令将正常工作。当然,提前设置Path变量听起来不是很灵活
如何使Path变量的即时更新在MSBuild Exec任务中工作?感谢已将添加到它确实具有的路径变量中,但是Path
是MsBuild进程中的一个属性,它与Exec任务使用的环境变量不同。您可以验证这一点:
<Exec Command="echo %PATH%"/>
如果出于某种原因,npm需要将其所在的目录添加到路径中,则只需像在命令行上那样执行此操作:(set PATH=…)&npm
。要为exec执行此操作,您需要使用&
退出&
:
<Exec Command="(set PATH=$(Path)) & npm" />
其中,
路径
按照您的问题进行修改。更多解释。我在Jeff Hardy's找到了这个问题的实际解决方案:
基本上是在命令行上设置环境变量。或者,您可以运行多行脚本:
<PropertyGroup>
<PythonExec><![CDATA[
set PYTHONPATH=C:\Foo
set FOO=42
python script.py
]]></PythonExec>
</PropertyGroup>
<Exec Command="$(PythonExec)" />
以上都是杰夫·哈代的博客。我测试了一个案例,其中我使用了$PATH
,使用了“长格式”技术,它对我很有效。
<ItemGroup>
<ExecLines Include="call C:\esp-idf\export.bat" />
<ExecLines Include="idf.py build" />
</ItemGroup>
<Exec Command="@(ExecLines->'%(Identity)&')" WorkingDirectory="$(SolutionDir)" />
为Exec
任务设置环境变量的另一种方法是其EnvironmentVariables
参数,该参数接受Variable=Value
定义的列表()。例如,以下代码设置Var1
和Var2
环境变量:
您可以用同样的方法设置路径
变量。但是,必须使用百分比编码对其值中的所有分号进行转义:
C:\Foo;D:\Bar
非常感谢!我的构建服务器的路径上有Node.js v0.12,但Node.js v6.x安装在其他地方,我使用它允许我的ASP.NET Core 2网页包项目使用较新的Node.js。不过,我不得不做一个小改动,在PATH=$(PATH)周围加上引号,因为有些路径中有空格。我已在您的答案中添加了引号。如果PATH
contains'),该怎么办?这不会导致不平衡的括号吗?(“传统的”PATH
包括“程序文件(x86)”@shmiltheca是的,好的一点是,OP的路径名很短,因此没有括号或空格,否则您需要在下面的链接或Ross的答案中提供引号或其他解决方案。
<PropertyGroup>
<PythonExec><![CDATA[
set PYTHONPATH=C:\Foo
set FOO=42
python script.py
]]></PythonExec>
</PropertyGroup>
<Exec Command="$(PythonExec)" />
<ItemGroup>
<ExecLines Include="call C:\esp-idf\export.bat" />
<ExecLines Include="idf.py build" />
</ItemGroup>
<Exec Command="@(ExecLines->'%(Identity)&')" WorkingDirectory="$(SolutionDir)" />