MSBUILD: ReadLinesFromFile не читает повторяющиеся строки

Я использую MSBuild для чтения всех файлов SQL после развертывания, от которых зависит мой проект базы данных, и я записываю эти данные в один загружаемый основной скрипт.

Я получаю все необходимые файлы:

<ReadLinesFromFile File="$(ScriptsList)" >
  <Output TaskParameter="Lines" ItemName="IncludedFiles"/>
</ReadLinesFromFile>

И затем я их группирую (чтение всех файлов построчно в ListedData)

<ReadLinesFromFile File='$(ScriptDirectory)$([System.String]::Copy("%(IncludedFiles.Identity))' Condition="$([System.String]::Copy('%(IncludedFiles.Identity)').Substring(0,2))==':r'">
  <Output TaskParameter="Lines" ItemName="ListedData"/>
</ReadLinesFromFile>

Все файлы находятся без проблем и потом записываю в output.sql. Но в файле отсутствуют несколько строк, из-за чего output.sql невозможно проанализировать с помощью sqlcmd.

ИСТОЧНИК:

INSERT INTO [Characteristics] (

 [CharacteristicID], 
 [CharName], 
 [RuleName], 
 [ActionRuleName], 
 [CriteriaSetID], 
 [ActionCriteriaSetID], 
 [ListCodeID], 
 [LocalID], 
 [BomCategory]

)

SELECT ...something,something... from Characteristics

INSERT INTO [CharacteristicDomain] (

 [RuleSet], 
 [CharName], 
 [CharSlot], 
 [Description], 
 [Seq], 
 [ValueInteger], 
 [ValueFloat], 
 [ValueDate], 
 [ValueString]

)

SELECT ...something,something... from CharacteristicsDomain

Как видите, будет несколько строк с одной скобкой ')' и задача читает только первую строку, а затем игнорирует все дубликаты (потому что это группа элементов, а не список). Таким образом, я получаю файл, который выглядит так:

ВЫВОД:

INSERT INTO [Characteristics] (
 [CharacteristicID], 
 [CharName], 
 [RuleName], 
 [ActionRuleName], 
 [CriteriaSetID], 
 [ActionCriteriaSetID], 
 [ListCodeID], 
 [LocalID], 
 [BomCategory]
)
SELECT ...something,something... from Characteristics
INSERT INTO [CharacteristicDomain] (
 [RuleSet], 
 [CharName], 
 [CharSlot], 
 [Description], 
 [Seq], 
 [ValueInteger], 
 [ValueFloat], 
 [ValueDate], 
 [ValueString]
SELECT ...something,something... from CharacteristicsDomain

Кто-нибудь знает способ читать строки из файлов с помощью MSBuild, но не терять повторяющиеся строки?
Я подумал, может быть, есть какой-то способ использовать задачу Exec? Я, конечно, не могу писать свои задачи, и мне также не разрешено изменять файлы sql (я не могу полагаться на пользователей, что они отформатируют файлы так, как мне нужно). Мне нужно читать файлы с помощью MSBuild, потому что я изменяю некоторые из них, прежде чем отправить их в sqlcmd.


person Damian Zarębski    schedule 07.07.2011    source источник


Ответы (2)


Как вы пишете в output.sql? Если вы выполняете пакетную обработку %(ListedData.Identity), это даст вам только уникальные строки. Используйте его как @(ListedData), и все должно быть в порядке.

person radical    schedule 07.07.2011
comment
Я использую ‹WriteLinesToFile File=output.sql Lines=@(ListedData)/›. Но я не хотел терять время, поэтому в настоящее время я пытаюсь выполнять чтение/запись/изменение вещей, используя задачу «Exec» с командой type для чтения/записи и задачу «FileUpdate» из msbuildtasks.tigris.org для модификации. файлы. Я попробую ваш способ позже, и я опубликую, если это сработает. - person Damian Zarębski; 07.07.2011

Ошибка вашего второго ReadLinesFromFile, который создает @(ListedData). Он использует пакетную обработку задач с %(IncludedFiles.Identity), поэтому обе строки с ")" будут помещены в один пакет.

person Brian Kretzler    schedule 07.07.2011