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

File io 使用MSBuild读取文件的内容(格式正确),file-io,msbuild,File Io,Msbuild,我正在尝试使用MSBuild动态生成SQL脚本。脚本负责更新一些表等。。。后期构建 此脚本的要求之一是从文本文件中检索产品的发行说明,并将其放入SQL脚本中的insert语句中 我正在使用TemplateFile替换模板中的值并生成SQL脚本,它按照预期工作。当我试图读取发行说明文件时,问题就开始了。以下是我的代码: <PropertyGroup> <SQLFileTemplate>Update Product Table.template</SQLFile

我正在尝试使用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)" />

更新产品表.template
更新产品表.sql
发行说明.txt
$(构建日期)
@(文件内容,“%0a%0d”)
0
@(版本)
$(图形用户界面版本)
$(产品ID)
当我这样做的时候,文件被读取了,但它只是被放在一个空格里,格式完全消失了。我已经查看了MSBuild.Community.Tasks.FileSystem中的ReadTextFromFile,但无法理解语法


有人能帮我一下吗?

看起来你想替换文件中的令牌?我认为你不需要读写这个文件。 您可以在扩展包中使用detokenise任务来实现相同的结果。见:


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

我看了Detokenise的文档,我不确定它是否是我想要的。。。它如何从文件中读取发行说明?我需要从本质上获取发行说明文件的(确切的)内容,并将它们放入SQL脚本中,替换SQL脚本模板(我已经定义)中的releaseNotes标记。然后我就没有什么帮助了。detokonise适用于普通令牌替换,但在文件中添加合并则是另一个问题。祝你好运这只是做同样事情的另一种方式。当文件编码混淆了unicode和utf-8时,我在readlinesfromfile中遇到了一些问题。