(В основном мы хотим импортировать целевые файлы в некоторых местах в *.csproj файле и иначе проверить, что файл следует нашим стандартам),
Каков лучший способ сделать это? Я планирую использовать C# и XDocument (LINQ к XML) и управлял узлами. Но это - лучший способ? Другие альтернативы могут быть:
Возможно, реальный вопрос: Что лучший способ состоит в том, чтобы считать и управлять XML программно?
Я бы лично использовал LINQ to XML напрямую ... если вы не занимаетесь действительно тяжелой обработкой, я не думаю, что для этого стоит создавать объектную модель. Сколько правил / чего еще нужно для этого инструмента?
MSBuild (формат файлов проекта) имеет объектную модель , которую можно использовать для таких приложений.
Что касается второй части нашего вопроса о том, как программно управлять XML, вот некоторые xml из файла конфигурации проекта. (web.config)
<system.web>
<compilation debug="false">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral,
</compilation>
</compilation>
и для синтаксического анализа с использованием LINQ-TO-XML , примерно следующее
XDocument assemblies = XDocument.Parse("web.config");
var projectAssemblies= from a in assemblies.Descendants("system.web\assemblies")
select new // What ever object you waant
{
Assembly = a.Attribute("assembly").Value.ToString(),
Version = a.Attribute("Version").Value.ToString(),
Culture = a.Element("Culture").Value.ToString(),
PublicKeyToken = a.Attribute("PublicKeyToken").Value.ToString()
};
foreach (var v in projectAssemblies)
{
// enjoy them
}
, надеюсь, это поможет
У нас есть собственный инструмент, который оперативно манипулирует файлами проекта для обновления ссылок и установки различных свойств. Поскольку файлы проекта не так уж сложны, мы просто напрямую манипулируем XML. Инструмент был написан задолго до того, как стал доступен LINQ, поэтому он его не использует, но я не вижу причин, по которым вы не могли сделать то, что предлагает Джон.
Когда мы обновили VS2005 до VS2008, нам нужно было внести лишь незначительные изменения в код, но, конечно, нет никаких гарантий в этом отношении. Возможно, нам придется внести более серьезные изменения в будущие версии.
Если вам интересно, в моем ответе на этот вопрос есть немного дополнительной информации о нашем инструменте. Следует ли использовать .sln для управления версиями?