2017-03-17 45 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')"/> 
相關問題