2011-10-04 33 views
10

MSBuildをバッチファイルから実行しています。 MSBuildスクリプトは、スクリプトを実行するときにMSBuildに作業ディレクトリを考慮させるディレクトリとは別のディレクトリにあります。 MSBuild.exeを起動すると、作業ディレクトリをどのように変更できますか?msbuild.exeの作業ディレクトリを変更します

編集:詳細
はのは、私はいくつかの他のサーバー上にあるのMSBuildスクリプトがあるとしましょう。私はコマンドを実行したいと思っています。

msbuild.exe \\my_server\c$\My\Path\To\Scripts\TestScript.msbuild 

私のコマンドプロンプトでc:\ tempで実行します。 TestScript.msbuildにファイルを作成するタスクがあるとしましょう。ファイルにはファイル名だけのパスはありません。私はファイルがc:\ tempの内部に作成されることを期待します。しかし、サーバー上にあるmsbuildファイルの隣には作成されません。これは私が変更したい動作です。

<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> 

私はCにコマンドシェルCDingにつもりです::\ tempにして、スクリプトを実行する。ここ

編集#2
は、私は私のテストで使用しているスクリプトです。 @Nick Nieslanikが言及している/ p:OutDirスイッチがある場合とない場合、HelloWorld.txtファイルは* .msbuildファイルが存在し、c:\ tempではないフォルダに表示されます。

+0

質問がわかりません。ディレクトリAにcmdファイルがあり、それをディレクトリBから呼び出すと、%cd%がエコーアウトされ、ディレクトリBが現在のディレクトリとして表示されます。したがって、スクリプト内のディレクトリを変更しない限り、現在のディレクトリを作業ディレクトリとみなしているはずです。明確にすることはできますか? –

+0

私は、あなたが説明している動作に同意します。しかし、MSBuildはそれをしていないようです。 * .buildファイルの場所を作業ディレクトリとみなしているようです。私は自分の質問を編集して、セットアップの詳細を説明します。 – RationalGeek

答えて

3

@jkohlhepp - 今すぐ表示されます。あなたは私のコメントで説明したものとは逆のことをある程度行っています。
MSBuild共通ターゲットは、MSBuildProjectDirectoryを使用して、出力フォルダを上書きしない限り、出力フォルダを決定します。だからあなたの場合には、その場所にドロップされるように、出力を強制的に

msbuild.exe \\my_server\c$\My\Pat\To\Scripts\TestScript.msbuild /p:OutDir=c:\temp 

を実行することができます。

EDIT:上記のプロジェクトファイルを考えると
、あなたが仕事に、このために、以下のような何かをするためにそれを編集する必要があるだろう:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <OutDir Condition=" '$(OutDir)' == '' ">bin\debug\</OutDir> 
    </PropertyGroup> 
    <ItemGroup> 
    <!-- Without prefacing files with paths, they ar assumed relative to the proj file --> 
    <FilesToCreate Include="$(OutDir)HelloWorld.txt" /> 
    </ItemGroup> 
    <Target Name="TouchFiles"> 
    <Touch Files="@(FilesToCreate)" AlwaysCreate="True" /> 
    </Target> 
</Project> 
+0

Hrmmm ....それは私にとってはうまくいかなかったようです。この質問のために作成した私のスクリプト例では、ディレクトリなしのファイル名のみを指定するタスクがあります。/p:Outdir = c:\ tempと指定しても、タッチしたファイルはmsbuildスクリプトファイルの隣に残っています。 – RationalGeek

+0

質問にそのmsbuildファイルを少し表示できますか? –

+0

はいできます。質問に完全なスクリプトを追加しました。 – RationalGeek

16

私への解決策を探している間、私は、この全体に走りました問題。ここに私の解決策(スクリプト作成)があります:

<?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> 

私はそれがもともと何を探していたと思いますか?

私の問題は、バッチファイルが別の同じディレクトリにあると思っていたが、私のmsビルドスクリプトが別の場所で実行されていたため、バッチファイルが2番目のバッチファイルを見つけられなかったということでした。

+0

あなたは私の人生を救った。終了コード99、begone。 – mmmeff

+0

'WorkingDirectory'属性は私が探していたものでした。感謝万円! –

関連する問題