我正在从批处理文件中执行MSBuild.MSBuild脚本与我希望MSBuild在运行脚本时考虑工作目录的目录位于不同的目录中.调用MSBuild.exe时,如何更改其工作目录?
编辑:更多细节
假设我有一个位于其他服务器上的MSBuild脚本.我想这样运行一个命令:
msbuild.exe \\my_server\c$\My\Path\To\Scripts\TestScript.msbuild
Run Code Online (Sandbox Code Playgroud)
我在c:\ temp下使用命令提示符运行该命令.假设我的TestScript.msbuild有一个创建文件的任务.该文件没有路径只是一个文件名.我希望文件在c:\ temp中创建.但它不会在位于服务器上的msbuild文件旁边创建.这是我想要改变的行为.
编辑#2
这是我在测试中使用的脚本:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Files Include="HelloWorld.txt" />
</ItemGroup>
<Target Name="TouchFiles">
<Touch Files="@(Files)" AlwaysCreate="True" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我将进入命令shell CDing到c:\ temp然后执行脚本.无论有没有@Nick Nieslanik提到的/ p:OutDir开关,HelloWorld.txt文件都会出现在*.msbuild文件所在的文件夹中,而不是c:\ temp.
Pla*_*ble 21
我在寻找解决问题的方法时遇到了这个问题.这是我的解决方案(构建脚本):
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Default">
<Exec Command="build.bat" WorkingDirectory="..\[your dir]\" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我相信你原本想要的更多吗?
我的问题是我的批处理文件调用另一个它预期在同一目录中,但由于我的ms构建脚本正在其他地方运行,批处理文件无法找到第二个批处理文件.
@jkohlhepp - 我现在明白了。在某种程度上,您所做的与我在评论中描述的相反。
MSBuild 常见目标使用 MSBuildProjectDirectory 来确定输出文件夹,除非您覆盖它。所以在你的情况下,你可以运行
msbuild.exe \\my_server\c$\My\Pat\To\Scripts\TestScript.msbuild /p:OutDir=c:\temp
Run Code Online (Sandbox Code Playgroud)
强制将输出丢弃在该位置。
编辑:
鉴于上面的项目文件,您需要对其进行编辑以执行类似以下操作才能正常工作:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutDir Condition=" '$(OutDir)' == '' ">bin\debug\</OutDir>
</PropertyGroup>
<ItemGroup>
<!-- Without prefacing files with paths, they are assumed relative to the proj file -->
<FilesToCreate Include="$(OutDir)HelloWorld.txt" />
</ItemGroup>
<Target Name="TouchFiles">
<Touch Files="@(FilesToCreate)" AlwaysCreate="True" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16249 次 |
| 最近记录: |