2012-01-13 3 views
0

MSBuildを使用してSQLスクリプトを動的に生成しようとしています。スクリプトはいくつかのテーブルなどを更新する責任があります...ビルド後。MSBuildを使用してファイルの正しい形式の内容を読み取る

このスクリプトの要件の1つは、テキストファイルから製品のリリースノートを取得し、SQLスクリプトのinsert文に挿入することです。

テンプレートファイルの値を置き換えてSQLスクリプトを生成するのに、TemplateFileを使用していますが、期待どおりに動作しています。私の問題は、リリースノートファイルを読むときに始まります。以下は、私のコードです:私はこれを行うと

<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)" /> 

は、ファイルが読み込まれているが、それは単に1つのスペースに入れていますし、フォーマットが完全になくなっています。私はMSBuild.Community.Tasks.FileSystemでReadTextFromFileを見てきましたが、構文を理解することはできません。

誰かが私に手を差し伸べることはできますか?

答えて

0

ファイルのトークンを置き換えようとしていますか?私はあなたがファイルを読み書きする必要はないと思う。 拡張パックでdetokeniseタスクを使用すると、同じ結果が得られます。参照してください:http://www.msbuildextensionpack.com/help/4.0.4.0/index.html

私はコミュニティの仕事よりも私はエクステンションパックが提供するより多くのコミュニティタスクを使用すると思いますが。

+0

私はDetokeniseのドキュメンテーションを見ましたが、私が探しているものではないと思います...ファイルからリリースノートをどうやって読むのですか?私は本質的に、リリースノートファイルの(正確な)内容を取って、SQLスクリプトに入れて、SQLスクリプトテンプレートのreleaseNotesトークン(これは私が定義したもの)を置き換える必要があります。 – Brandon

+0

それから私はあまり役に立たない。 detokoniseは通常のトークンの置換には適していますが、ファイル内でのマージの追加は別の問題です。がんばろう。それは、同じことをやるという別のやり方にすぎません。ファイルのエンコーディングがUnicodeとutf-8を混在させたとき、私はreadlinesfromfileからいくつかの問題を抱えています。 –

関連する問題