c# - 分配从 MSBuild 中的属性获取的参数值

标签 c# .net batch-file msbuild

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

如何组合 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-- 但它只打印 ----

最佳答案

如果在命令行中使用

 /property:"H='Hello'"

你可以简单地使用

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

不需要 <ParameterGroup /> block

关于c# - 分配从 MSBuild 中的属性获取的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39919515/

相关文章:

c# - 如何将字节数组转换为通用数组?

c# - 不确定如何修复这个奇怪的 Entity Framework (关系/导航)错误

c# - 跟踪方法执行时间

c# - 如何在C#中有效地在桌面上绘图?

c# - 为什么 C# 编译器不内联 MSIL 代码?

batch-file - 错误 本地场不可访问。带有 FeatureDependencyId 的 Cmdlet 未注册

excel - 从命令行或批处理文件运行 Excel 宏的方法?

apache - 是否有类似于 SQL Server 2008 R2 Express 静默安装的 Apache Tomcat 7.0.34 批量静默安装指南?

带有字节数组的 c# 排序列表不起作用

c# - 具有覆盖 : Map an unmapped base class collection 的 Fluent Nhibernate Automapping