Генерировать классы C # из XML, только если XML изменился - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть событие перед сборкой проекта C #, который запускает xsltproc для преобразования некоторых XML в исходные файлы C #.Сгенерированный источник затем создается обычным способом.Это означает, что проект всегда создается независимо от того, изменился ли XML.

Существует ли способ генерировать классы C # только в случае изменения XML?Является ли событие перед сборкой неправильным подходом?Не лучше ли мне использовать какой-нибудь пользовательский инструмент для преобразования XML в C #?

Я использую Visual Studio 2010. XML не содержит сериализованных объектов.

Любая помощьвысоко ценится.

1 Ответ

3 голосов
/ 22 февраля 2012

В конце я добавил новую ItemGroup в мой файл csproj со ссылками на каждый файл XML. Я дал каждому элементу имя элемента Preprocess:

<ItemGroup>
  <Preprocess Include="Xml\MySourceXmlFile1" />
  <Preprocess Include="Xml\MySourceXmlFile2.xml" />
</ItemGroup>

Позже в файле проекта я переопределил цель BeforeBuild, чтобы она преобразовывала каждый элемент предварительной обработки в исходный файл C # с тем же именем, что и файл XML:

<Target Name="BeforeBuild"
  Inputs="@(Preprocess)"
  Outputs="@(Preprocess->'$(ProjectDir)%(Filename).cs')">
  <Exec Command="xsltproc -o %22$(ProjectDir)%(Filename).cs%22 %22MyTransform.xsl%22 @(Preprocess)" />
</Target>

Обратите внимание, что аргументы xsltproc должны быть экранированы с% 22.

Теперь исходный файл C # создается только в случае изменения XML. Я получил подход от этого сообщения на форуме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...