可能在MSBuild进程

时间:2016-07-22 16:12:36

标签: msbuild

MSBuild有点新鲜。我有一个robots.txt文件夹,它使用configuration将其中一个文件复制到项目的根文件夹中。这是按预期工作的。但是,当我想运行Debug它找不到文件时,b / c显然我不需要一个用于调试。我没有添加这个虚拟文件,而是如果configuration是列出的一个或另一个,我想将它从构建过程中排除,如下所示:

  <Target Name="AfterBuild">
    <Copy SourceFiles="Web.temp.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" />
    <Delete Files="Web.temp.config" />
    <Copy SourceFiles="$(ProjectDir)Content\robots\robots.$(Configuration).txt" Condition="$(Configuration)==Staging" DestinationFiles="robots.txt" OverwriteReadOnlyFiles="True" />
    <Copy SourceFiles="$(ProjectDir)Content\robots\robots.$(Configuration).txt" Condition="$(Configuration)==Production" DestinationFiles="robots.txt" OverwriteReadOnlyFiles="True" />
  </Target>

您可以在上面看到我有(2)单独的<Copy>元素正在执行相同的操作(关于robots.txt文件)。我可以在这里使用“OR”条款吗?如果是这样,怎么样?有没有更好的方法来做这件事?

理想方法:

<Copy SourceFiles="$(ProjectDir)Content\robots\robots.$(Configuration).txt" Condition="$(Configuration)==Production || $(Configuration)==Staging" DestinationFiles="robots.txt" OverwriteReadOnlyFiles="True" />

1 个答案:

答案 0 :(得分:1)

MSbuild&#34;或条款&#34;被写为Or 而不是||,否则您的方法对我来说似乎没问题。 (fwiw,我真的不熟悉MSBuild。)

此外,我写条件的方式(尽管可能部分是货物崇拜)是Condition="'$(Bla)' == 'Value'",即我引用条件中的值。

您可以在q文字中尝试Condition="'$(Configuration)' != 'Debug'"