我正在尝试使用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,但我无法弄清楚语法。
有人可以帮我一把吗?
答案 0 :(得分:0)
看起来你试图替换文件中的标记?我认为你不需要经历读写文件。 您可以使用扩展包中的detokenise任务来获得相同的结果。请参阅:http://www.msbuildextensionpack.com/help/4.0.4.0/index.html
虽然我确实使用了社区任务,但我认为扩展包比社区任务提供的要多得多。