首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将PropertyGroup/ItemGroup中可变数量的项传递给msbuild脚本

要将PropertyGroup/ItemGroup中可变数量的项传递给msbuild脚本,您可以使用以下方法:

  1. 使用PropertyGroup定义变量:

在msbuild脚本中,使用PropertyGroup定义变量,例如:

代码语言:<PropertyGroup>
复制
  <MyVariable>Value</MyVariable>
</PropertyGroup>
  1. 使用ItemGroup定义项:

在msbuild脚本中,使用ItemGroup定义项,例如:

代码语言:txt
复制
<ItemGroup>
  <MyItems Include="Item1" />
  <MyItems Include="Item2" />
  <MyItems Include="Item3" />
</ItemGroup>
  1. 使用%()表示法传递变量和项:

在msbuild脚本中,使用%()表示法传递变量和项,例如:

代码语言:<Target Name="MyTarget">
复制
 <Message Text="MyVariable: $(MyVariable)" />
 <Message Text="MyItems: @(MyItems)" />
</Target>
  1. 使用PropertyFunctions传递变量:

在msbuild脚本中,使用PropertyFunctions传递变量,例如:

代码语言:<PropertyGroup>
复制
  <MyVariable>Value</MyVariable>
</PropertyGroup><Target Name="MyTarget">
 <PropertyGroup>
    <MyNewVariable>$([System.String]::Copy($(MyVariable)).ToUpper())</MyNewVariable>
  </PropertyGroup>
 <Message Text="MyNewVariable: $(MyNewVariable)" />
</Target>
  1. 使用ItemFunctions传递项:

在msbuild脚本中,使用ItemFunctions传递项,例如:

代码语言:txt
复制
<ItemGroup>
  <MyItems Include="Item1" />
  <MyItems Include="Item2" />
  <MyItems Include="Item3" />
</ItemGroup><Target Name="MyTarget">
  <ItemGroup>
    <MyNewItems Include="@(MyItems->'New%(Identity)')" />
  </ItemGroup>
 <Message Text="MyNewItems: @(MyNewItems)" />
</Target>

通过以上方法,您可以将PropertyGroup/ItemGroup中可变数量的项传递给msbuild脚本。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何创建一个基于命令行工具跨平台 NuGet 工具包

NuGet;PackagePath 表示这一打包到 NuGet 路径。...当然,使用 dotnet build 或者 dotnet msbuild 也是有这样全局属性。 在 Program.cs ,只需要解析命令行参数即可接收这样参。...需要注意,控制台参数是有字符数量限制,要解决参字符数量限制问题,可以参考 Roslyn 使用 WriteLinesToFile 解决参数过长无法传入。...有两种不同方式: 直接数据,这些数据可以被捕获成属性或者,具体可以阅读我另一篇博客: 如何使用 MSBuild Target(Exec)控制台输出 报告编译警告和编译错误,具体可以阅读我另一篇博客...Include="$(IntermediateOutputPath)Doubi.cs" /> 需要注意:编译期间才生成()或者属性(<PropertyGroup

1K20
  • MSBuild简单介绍与使用

    所以这三部分分别代表了引擎、脚本和扩展能力。...> 在构造工程我们可以定义和使用变量(通过Property/PropertyGourp/Item/ItemGroup等元素),可以使用条件分支(...这里还需要强调一点是,项目级元素(Property)可以在元素下定义,也可以在构造过程作为外部参数传入,这是一个非常有用特性,一般编译时选择配置(Debug或者Release)就是利用这个特性实现...我们都知道,在一个项目的生成过程可能需要完成几项不同任务(比如编译、单元测试、check-in到源代码控制服务器中等),其中每一任务都可以用Target来表示。...另外,如果Property元素数量比较多,你还可以把它们分门别类地放在不同PropertyGroup里,以提高代码可阅读性。这对Property本身没有任何影响。

    1.2K50

    理解 C# 项目 csproj 文件格式本质和编译流程

    ItemGroup ItemGroup 是用来指定集合地方,这与它名字非常契合。那么这集合里面放什么呢?答案是——什么都能放!...属性就是前面 PropertyGroup 那些属性和 ItemGroup 里说那些;而 Targets 是新东西,这才是真正用来定义编译流程关键,由于 Targets 是所有节点里面最复杂部分...一个 Target 内可以放多个 Task,不止如此,还能放 PropertyGroupItemGroup,不过这是仅在编译期生效属性和了。...编译器是如何将这些零散部件组织起来? 这里说编译器几乎只指 msbuild 和 Roslyn,前者基于 .NET Framework,后者基于 .NET Core。...随后根据 PropertyGroup 里面设置属性正确显示属性面板状态,根据 ItemGroup 正确显示解决方案管理器引用列表、文件列表。

    2.6K10

    .Net Core迁移到MSBuild平台(二)

    一、前言 在上一篇文章.Net Core迁移到MSBuild多平台编译问题中,简单讲了下新项目配置文件节点配置,这篇我将用一些例子来详细讲下从project.json迁移到msbuild过程节点配置...做过完整迁移新项目配置文件朋友,肯定会觉得新项目配置文件Msbuild配置太扯了,虽然能直接编辑项目文件,但整个配置文件没有了像project.json智能提示,当你在打开文件后你就会发现以前很轻松能写出来...-- regrettably, 'owners' does not translate to MSBuild. --> MsBuild脚本 { "scripts":...> 三、结语 说实话MSBuild项目配置系统还是比较灵活,以后整个dotnet体系构建过程也都得到了统一。...在dotnet cli也集成了msbuild,即dotnet build。

    1.8K20

    如何使用 MSBuild Target(Exec)控制台输出

    将此属性设置为 True,将能够捕获控制台输出到 MSBuild 。(不过据说典型程序员是不爱看文档) 那么,捕获输出去了哪里呢?...我在 如何创建一个基于 MSBuild Task 跨平台 NuGet 工具包 中提到了使用 Output 来将 Task 参数输出出来。而 Exec 也是这么做。...但如果你希望得到是一组值(例如新增了一组需要编译文件),那么需要得到ItemGroup 多个值,而不是 PropertyGroup 单个值。...(如果不太明白 ItemGroupPropertyGroup 之间差别,不要紧,可以阅读 理解 C# 项目 csproj 文件格式本质和编译流程。)...MSBuild 还自带了一个 Task,名为 CreateItem,就是从一段字符串创建一组 Item。通过下面这段代码,我们能将上一节捕获到属性转换成集合。

    2.1K10

    从零开始构建MSBuild C#项目文件

    csproj项目文件是一个XML文件,根节点是Project节点,可以包括若干个ItemGroup节点和Target节点。ItemGroup节点是一个容器,用来包括若干个元素。...如果定义了多个,Target在执行时候会以类似foreach形式迭代执行每一个。 有了项目文件,就可以使用MSBuild来执行项目的生成了,/t表示执行名为BuildTarget。...>Bin\ 每个项目文件可以包括若干个PropertyGroup节点,其中可以包括若干个属性节点,每一个节点定义一个属性,可以在项目文件引用...> <Target Name...定义ItemGroup之后,就可以利用@(节点名)来引用Item了。 PropertyGroup节点是属性组,可以有多个节点,用来包含项目构建过程中使用到属性。

    1.1K20

    MSBuild入门

    MSBuild   :   主要是存储一些项目文件信息,以及文件元数据信息(如版本号)。...MSBuild任务:   Build过程一些原子操作(如CSC、MakeDir) MSBuild目标:   按特定顺序将任务组织在一起,并允许在命令行单独指定各个部分。...--都要包含在ItemGroup元素内部--> <!...任务 上述Msaage就是一个任务,用于打印信息,常用一些还包括CSC、MakeDir、Copy等等,大多任务都是有输出信息,这些信息可以通过OutPut元素存储在属性或者。...MSBuild目标 上面的一个例子Target元素就是MSBuild目标,此目标按照编译源代码、打印编译好程序文件名、执行该文件这个顺序组织了这三个任务。这就是目标所要做事情。

    1.6K80

    MSBuild入门(续)

    主要有一下几方面: MSBuild特殊字符:MSBuild保留一些字符,以及XML特殊字符处理。 MSBuild条件: Condition特性,作用类似于C#if。...MSBuild 大都是用来引入文件用,而文件会有一些附加信息,比如版本,语言等,而这些附加信息在项目文件是以子元素出现,称为元数据。...,用来执行某一逻辑处理,但是xml格式项目文件是没有这个处理能力,所以这些任务都是映射到.NET类库一些类,由这些类来处理操作逻辑。.../2003"> 5 6 Library 7 8 ...如果任务有输出参数的话,Output元素总是作为任务子元素出现,作为一个中间桥梁把任务输出传输到属性或者

    93790

    如何在 MSBuild 中正确使用 % 来引用每一个(Item)元数据

    MSBuild 写在 每一是一个 Item,Item 除了可以使用 Include/Update/Remove 来增删之外,还可以定义其他元数据(Metadata)...使用 % 可以引用 Item 元数据,本文将介绍如何正确使用 % 来引用每一个元数据。...为了简单说明 % 用法,我将已收集到所有的元数据和它本体一起输出到一个文件。这样,后续编译过程可以直接使用这个文件来获得所有的和你希望关心它所有元数据。...: 定义一个文件路径,这个路径即将用来存放所有 Content 和它元数据; 定义一个工具路径,我们即将运行这个路径下命令行程序来执行自定义编译; 收集所有的 Content ,然后把所有...编译过程操作文件和文件夹(检查存在/创建文件夹/读写文件/移动文件/复制文件/删除文件夹) - walterlv 关于元数据其他信息 一些已知元数据: MSBuild Well-known Item

    28010

    MSBuild 编译过程操作文件和文件夹(检查存在创建文件夹读写文件移动文件复制文件删除文件夹)

    本文整理 MSBuild 在编译过程对文件和文件夹处理各种自带编译任务(Task)。 ---- Exists 检查文件存在 使用 Exists 可以判断一个文件或者文件夹是否存在。...注意无论是文件还是文件夹,只要给定路径存在就返回 true。可以作为 MSBuild 属性、和编译任务执行条件。...,移动后,所有的文件将平级地在输出文件夹(即所有的子文件夹文件也都被移动到同一层目录中了)。...即便目标文件是只读,也会覆盖。 Copy 复制文件 下面的例子是将输出文件拷贝到一个专门目录,保留原来所有文件之间目录结构,并且如果文件没有改变则跳过。...,甚至将代码写到文件以便动态生成代码。

    33220

    MSBuild 如何编写带条件属性、集合和任务 Condition?

    在项目文件 csproj ,通过编写带条件属性(PropertyGroup)、集合(ItemGroup)和任务(Target)可以完成更加复杂项目文件功能。...本文介绍如何编写带条件 MSBuild 。 ---- Condition 如果要给你 MSBuild 附加条件,那么加上 Condition 特性即可。...Condition 可以写在任何地方,例如 PropertyGroupItemGroup、Target 或者内部一个属性或一个或者一个任务等。...单引号 在上面的例子,我们给条件所有字符串加上了包裹单引号。 单引号对于简单字母数字字符串是不必要,对于布尔值来说也是不必要。但是,对于空值来说,是必须加上,即 ''。 == 和 !...当然,在项目文件,用于表示数值字符串在此操作符下表示就是数值。

    48230

    如何编写基于 Microsoft.NET.Sdk 跨平台 MSBuild Target(附各种自带 Task)

    ---- Target 节点结构 内部几乎有着跟 一样节点结构,内部也可以放 PropertyGroupItemGroup,不过还能放更加厉害 Task...而本例,WriteCodeFragment Task 就是生成代码文件,并且将生成文件作为一 Compile Item 和 FileWrites Item。...在 理解 C# 项目 csproj 文件格式本质和编译流程 我们提到 ItemGroup 节点,其作用由 Target 指定。... 里 和 是静态状态,如果使用 Visual Studio 打开项目,那么所有的状态将会直接在 Visual Studio...项目文件列表和项目属性显示;而 内部 和 是在编译期间动态生成,不会在 Visual Studio 显示;不过,它为我们提供了一种在编译期间动态生成文件或属性能力

    86210

    编写你专属 MSBuild C# 代码生成器:在保存文件时自动实时生成你代码

    --> + + + </ItemGroup...对于已知(Item)来说,Generator 属性是 MSBuild 编译时一个已知元数据(Metadata),其作用为当此文件改变时,会执行一个指定 Target 我们将其指定为 MSBuild...:Compile,即指定为 MSBuild 内置一个 Target Compile,意为执行一次编译 然而,WalterlvDemoFile 并不是已知,所以我们还需要额外将 WalterlvDemoFile...关于已知,可以阅读: Common MSBuild Project Items - Visual Studio - Microsoft Docs 加完之后,WalterlvDemoFile Generator...属性就可以被自动启用了 延伸 在上面那个最简 Demo ,我们弹出了个 Windows 版本号,这真的只是为了让你立刻注意到某个代码执行了。

    37110
    领券