Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有更新MSBuild项元数据值的方法?_Msbuild - Fatal编程技术网

有没有更新MSBuild项元数据值的方法?

有没有更新MSBuild项元数据值的方法?,msbuild,Msbuild,我需要更新项目元数据值。很容易将添加到值中: 傅;巴;%(预定义) 但是,我需要做的是删除部分值。理想情况下,类似这样的东西会起作用,但它不会: %(preprocessDefinitions.Replace('FOO;','') 在MSBuild 4中有什么方法可以做到这一点吗?我也在尝试做同样的事情,虽然我不知道如何从字符串中删除定义,但我确实发现了一个附加属性:UndefinePreprocessDefinitions <ItemDefinitionGroup> &

我需要更新项目元数据值。很容易将添加到值中:


傅;巴;%(预定义)
但是,我需要做的是删除部分值。理想情况下,类似这样的东西会起作用,但它不会:


%(preprocessDefinitions.Replace('FOO;','')

在MSBuild 4中有什么方法可以做到这一点吗?

我也在尝试做同样的事情,虽然我不知道如何从字符串中删除定义,但我确实发现了一个附加属性:
UndefinePreprocessDefinitions

<ItemDefinitionGroup>
  <ClCompile>
    <UndefinePreprocessorDefinitions>FOO</UndefinePreprocessorDefinitions>
  </ClCompile>
</ItemDefinitionGroup>

这将取消以前对FOO的定义。将
-DFOO-UFOO
传递给编译器而不是什么都不传递可能看起来有点傻,但它也可以正常工作。

在后续的
项目定义组中,您可以调用当前元数据的一部分:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Dump" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemDefinitionGroup>
    <SomeItem>
      <SomeMetaData>foo,bar,baz</SomeMetaData>
    </SomeItem>
  </ItemDefinitionGroup>

  <ItemGroup>
    <SomeItem Include="one;two" />
  </ItemGroup>

  <ItemDefinitionGroup>
    <SomeItem>
      <!-- Remove "bar" -->
      <SomeMetaData>$([System.String]::Copy('%(SomeMetaData)').Replace('bar',''))</SomeMetaData>
    </SomeItem>
  </ItemDefinitionGroup>

  <Target Name="Dump">
    <Message Text="SomeItem.SomeMetaData: @(SomeItem -> '%(Identity)=%(SomeMetaData)') " />
  </Target>
</Project>
 > MSBuild .\foo.proj
Microsoft (R) Build Engine version 14.0.25420.1
Copyright (C) Microsoft Corporation. All rights reserved.

Build started 2/17/2017 7:09:48 PM.
Project "D:\temp\mb\foo.proj" on node 1 (default targets).
Dump:
  SomeItem.SomeMetaData: one=foo,,baz;two=foo,,baz
Done Building Project "D:\temp\mb\foo.proj" (default targets).


Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:00:00.03