2012-01-13 81 views
0

我正在嘗試使用MSBuild動態生成SQL腳本。該腳本負責更新一些表格等......後期構建。使用MSBuild讀取(正確格式化)的文件內容

此腳本的其中一項要求是從文本文件中檢索產品的發行說明,並將它們放入SQL腳本中的插入語句中。

我正在使用TemplateFile替換模板中的值並生成SQL腳本,並且它按預期工作。當我嘗試閱讀發行說明文件時,我的問題就開始了。下面是我的代碼:

<PropertyGroup> 
    <SQLFileTemplate>Update Product Table.template</SQLFileTemplate> 
    <SQLFileName>Update Product Table.sql</SQLFileName>  
    <ReleaseNotesFile>Release Notes.txt</ReleaseNotesFile> 
</PropertyGroup> 

<ReadLinesFromFile File="$(ReleaseNotesFile)"> 
     <Output TaskParameter="Lines" ItemName="FileContents" /> 
</ReadLinesFromFile> 

<ItemGroup> 
    <Tokens Include="releaseDate"> 
     <ReplacementValue>$(buildDate)</ReplacementValue> 
    </Tokens> 
    <Tokens Include="releaseNotes"> 
     <!--Escape the CR LF because MSBuild will replace them with semicolon--> 
     <ReplacementValue>@(FileContents, '%0a%0d')</ReplacementValue> 
    </Tokens> 
    <Tokens Include="releaseLevel"> 
     <ReplacementValue>0</ReplacementValue> 
    </Tokens> 
    <Tokens Include="currentVersionInts"> 
     <ReplacementValue>@(versionInts)</ReplacementValue> 
    </Tokens> 
    <Tokens Include="currentVersion"> 
     <ReplacementValue>$(GuiVersion)</ReplacementValue> 
    </Tokens> 
    <Tokens Include="productVersionId"> 
     <ReplacementValue>$(productId)</ReplacementValue> 
    </Tokens> 
</ItemGroup>  

<TemplateFile Template="$(SQLFileTemplate)" OutputFileName="$(SQLFileName)" Tokens="@(Tokens)" /> 

當我做到這一點,該文件被讀,但它只是投入單一的間距和格式完全消失。我已經看過MSBuild.Community.Tasks.FileSystem中的ReadTextFromFile,但我無法弄清楚語法。

有人可以幫我一下嗎?

回答

0

看起來像你試圖替換文件中的標記?我不認爲你需要閱讀和寫入文件。 您可以使用擴展包中的去話權化任務來實現相同的結果。請參閱:http://www.msbuildextensionpack.com/help/4.0.4.0/index.html

儘管我確實使用社區任務,但我認爲擴展包提供的社區任務比社區任務多得多。

+0

我看了Detokenise的文檔,我不確定這是我在找什麼......它如何從文件中讀取發行說明?我需要從本質上獲取發行說明文件的(確切)內容,並將它們放到SQL腳本中,替換SQL腳本模板(我已定義)中的releaseNotes標記。 – Brandon 2012-01-16 13:53:37

+0

然後我沒有太大的幫助。 detokonise對於普通的令牌替換是有好處的,但是在文件中添加合併是一個不同的問題。祝你好運。這只是做同樣事情的一種不同方式。當文件編碼中混入了unicode和utf-8時,我從readlinesfromfile中遇到了一些問題。 – 2012-01-16 14:01:56