2017-03-17 22 views
1

我有一个简单的要求,在项目目录中创建一个名为user.config文件,但仅当它不存在时。MSBuild复制或创建文件,如果不存在

第一次尝试:

<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

如何改变最后一行在第一次尝试''?还要弄清楚为什么第二个工作不起作用(在命令行上传递/ v:d)和/或添加一个Message任务,其中显示诸如%(RootDir)%(Directory)%(文件名)%(Extension) – stijn

+0

@Stijn,在第一次尝试中改变最后一行的工作就像一个魅力。您可以添加它作为答案,我会在这里奖励您正确的答案。 – Trygve

+0

@stijn。希望你看到这一点。 – Trygve

回答

2

的第一次尝试是非常规范的方式来做到这一点,你基本上得到它的权利,除了缺少的条件(其中每一个的MSBuild任务支持!):

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