使用MSBuild读取文件的(格式正确的)内容

时间:2012-01-13 21:35:09

标签: file-io msbuild

我正在尝试使用MSBuild动态生成SQL脚本。该脚本负责更新一些表格等...后期构建。

此脚本的一个要求是从文本文件中检索产品的发行说明,并将它们放入SQL脚本中的insert语句中。

我正在使用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,但我无法弄清楚语法。

有人可以帮我一把吗?

1 个答案:

答案 0 :(得分:0)

看起来你试图替换文件中的标记?我认为你不需要经历读写文件。 您可以使用扩展包中的detokenise任务来获得相同的结果。请参阅:http://www.msbuildextensionpack.com/help/4.0.4.0/index.html

虽然我确实使用了社区任务,但我认为扩展包比社区任务提供的要多得多。