从MSBuild

时间:2016-10-07 14:21:27

标签: c# .net batch-file msbuild

我尝试使用MSBuild和内联任务组合批处理脚本和C#代码。看起来像传递命令行参数的唯一方法是在msbuild中使用属性(/property命令行开关并且从内联任务访问外部事物的唯一方法是使用属性。

如何在MSBuild中组合属性和参数以使其在内联任务中可访问?

以下是一个示例脚本(应保存为.bat.cmd):

<!-- :
    @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>

当传递/property:H=Hello时,打算打印此脚本 --Hello--但它只打印----

1 个答案:

答案 0 :(得分:2)

如果在命令行中使用

 /property:"H='Hello'"

你可以简单地使用

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

无需<ParameterGroup />