MSBuild复制或创建文件(如果不存在)

时间:2017-03-17 10:19:07

标签: msbuild

我有一个简单的要求,即在项目目录中创建一个名为user.config的文件,但前提是它已经存在。

首次尝试:

  <Target Name="BeforeBuild">
    <ItemGroup>
      <Line Include="line01"><Text>&lt;appSettings&gt;&lt;/appSettings&gt;</Text></Line>
      <LineText Include="%(Line.Text)" />
    </ItemGroup>
    <WriteLinesToFile File="user.config" Lines="@(LineText)" Overwrite="false" />
  </Target>

无效,因为它附加到文件

第二次尝试:

  <Target Name="BeforeBuild">
    <CreateItem Include="user_example.config">
      <Output ItemName="ItemsThatNeedToBeCopied" TaskParameter="Include" />
    </CreateItem>
    <Copy SourceFiles="@(ItemsThatNeedToBeCopied)" DestinationFolder="$(ProjectDir)" Condition="!Exists('%(RootDir)%(Directory)%(Filename)%(Extension)')" />
  </Target>

不起作用,因为似乎没有任何事情发生,并且详细的msbuild输出中没有任何内容告诉我任何有关原因

任何MSBuild专家都应该很容易看出我做错了什么......

1 个答案:

答案 0 :(得分:4)

第一次尝试几乎是执行此操作的规范方法,除了缺少的条件(每个MsBuild任务都支持)之外,你基本上做对了:

<WriteLinesToFile File="user.config" Lines="@(LineText)" Overwrite="True"
                  Condition="!Exists('user.config')"/>