首页 > 解决方案 > 如何使用 MSBuild 有条件地包含一个文件来代替另一个文件?

问题描述

我们有一个项目,其中包含几个不同的构建配置,这些配置具有同名文件,但内容有时略有不同。这些文件中的大多数都位于Resources文件夹中。在 MSBuild 和 Xamarin.Mac 之间,程序知道从与构建配置匹配的子文件夹中取出文件,并将其移动到Resources文件夹的根目录,代码如下:

<ItemGroup Condition="'$(Configuration)' == 'ReleaseA'">
  <BundleResource Include="Resources\A\logo.png">
    <LogicalName>logo.png</LogicalName>
  </BundleResource>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'ReleaseB'">
  <BundleResource Include="Resources\B\logo.png">
    <LogicalName>logo.png</LogicalName>
  </BundleResource>
</ItemGroup>

因此,如果我构建ReleaseA,MSBuild 知道我想将Resources\A\logo.png其视为Resources\logo.png.

现在,我正在尝试使用与 Resources 文件夹无关的单个文件来完成同样的事情:

<ItemGroup Condition="'$(Configuration)' == 'ReleaseA'">
  <InterfaceDefinition Include="UI\A\FileSelectWindow.xib">
    <LogicalName>FileSelectWindow.xib<\LogicalName>
  </InterfaceDefinition>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'ReleaseB'">
  <InterfaceDefinition Include="UI\B\FileSelectWindow.xib">
    <LogicalName>FileSelectWindow.xib<\LogicalName>
  </InterfaceDefinition>
</ItemGroup>

不幸的是,这不起作用,我不确定如何与 MSBuild 沟通,我想将子文件夹 A 或 B 中的 .xib 文件视为实际UI\FileSelectWindow.xib

如何在 MSBuild 中执行此操作?我尝试过自定义命令 ,<Move><Copy>,但它们实际上都修改了在 git 中跟踪的文件。我还尝试将文件直接放在UI文件夹中,并将它们命名为 FileSelectWindow-A 和 FileSelectWindow-B 具有相同的逻辑名称也无济于事。

标签: msbuild

解决方案


推荐阅读