2012-01-13 4 views
0

MSBuild를 사용하여 SQL 스크립트를 동적으로 생성하려고합니다. 스크립트는 일부 테이블 등을 업데이트하는 작업을 담당합니다 ... 빌드 후 작업.MSBuild를 사용하여 파일의 올바른 형식의 내용을 읽습니다.

이 스크립트의 요구 사항 중 하나는 텍스트 파일에서 제품의 릴리스 노트를 검색하여 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

파일에서 토큰을 바꾸는 것처럼 보입니까? 나는 당신이 파일을 읽고 쓰는 것을 거칠 필요가 없다고 생각한다. 확장 팩에서 detokenise 태스크를 사용하여 동일한 결과를 얻을 수 있습니다. 참조 : http://www.msbuildextensionpack.com/help/4.0.4.0/index.html

나는 커뮤니티 작업을 사용하지만 확장 팩에는 커뮤니티 작업보다 제공 할 것이 많다고 생각합니다.

+0

내가 Detokenise에 대한 설명서를 살펴본 결과, 필자가 찾고있는 것이 확실하지 않습니다 ... 파일의 릴리스 노트를 어떻게 읽습니까? 기본적으로 릴리스 노트 파일의 내용을 가져 와서 SQL 스크립트에 넣고 SQL 스크립트 템플리트의 releaseNotes 토큰을 대체해야합니다. – Brandon

+0

그럼 난별로 도움이 안돼. detokonise는 일반 토큰 대체에 적합하지만 파일에 병합 추가는 다른 문제입니다. 행운을 빕니다. 그것은 같은 일을하는 다른 방법 일뿐입니다. 나는 파일 인코딩이 유니 코드와 utf-8이 섞여있을 때 readlinesfromfile에서 몇 가지 문제를 겪었습니다. –

관련 문제