2016-10-07 8 views
3

MSBuildとインラインタスクを使用してバッチスクリプトとC#コードを結合しようとしています。コマンドライン引数を渡す唯一の方法のように見えます(/propertyコマンドラインmsbuildのスイッチ)、インラインタスクから何か外部のものにアクセスする唯一の方法は、プロパティを使用することです。MSBuildのプロパティから取得したパラメータ値を割り当てます。

MSBuildのプロパティとパラメータをインラインタスクでアクセス可能にする方法を教えてください。ここで

は、サンプルスクリプトです( .batとして、または .cmdでなければなりませんが、保存されます): /property:H=Helloとして

<!-- : 
    @echo off 


     echo -^- FROM BATCH 

     for /r "%SystemRoot%\Microsoft.NET\Framework\" %%# in ("*msbuild.exe") do set "msb=%%#" 

     if not defined msb (
      echo no .net framework installed 
      exit /b 10 
     ) 

     rem :::::::::: calling msbuid ::::::::: 
     call %msb% /nologo /noconsolelogger "%~dpsfnx0" /property:"H=From C#" 
     rem :::::::::::::::::::::::::::::::::::: 
     exit /b %errorlevel% 
--> 


<Project ToolsVersion="$(MSBuildToolsVersion)" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="_"> 
    <_/> 
    </Target> 
    <UsingTask 
    TaskName="_" 
    TaskFactory="CodeTaskFactory" 
    AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v$(MSBuildToolsVersion).dll" > 

    <ParameterGroup > 
     <Z ParameterType="System.String">$(H)</Z> 
    </ParameterGroup> 

    <Task> 
     <Code Type="Fragment" Language="cs"> 
     <![CDATA[ 
      System.Console.WriteLine("-- "+"$(H)"); 
     ]]> 
     </Code> 
    </Task> 
    </UsingTask> 
</Project> 

が渡され、その意図は --Hello--を印刷するには、このスクリプトですが、それだけで

答えて

2

を印刷しますコマンドラインで使用する場合

/property:"H='Hello'" 

あなたは、単に<ParameterGroup />ブロック

を必要とせずに

System.Console.WriteLine("--"+$(H)+"--"); 

を使用することができます

関連する問題