Здравствуйте, Arsen.Shnurkov, Вы писали:
AS>Примеры задач, решение которых должен обеспечивать фреймворк:
О, ну так гораздо интереснее получается. Забавная штука должна выйти

если не секрет, для чего? Это уже не в рамках темы, просто любопытно.
Вот что я точно могу подсказать — это сохранение форматирования при правке. Тут два варианта. Или используем XDocument с preserve whitespace = true + расставляем XmlWhitespace для новых тегов / атрибутов, или, если документ целиком нельзя держать в памяти, городим свой visitor поверх пары xml reader + xml writer, как всё в том же
XDocument.
Всё остальное — это уже на ваш выбор. Я бы обратил внимание на следующее:
1. Семантическая модель для csproj и прочих xml-based форматов. Она вам поможет, но не очень сильно, т.к.
* csproj позволяет очень много вольностей, вот это к примеру — валидный файл
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{0C3FD4CB-7665-4ADF-8F18-E039DCDBEC74}</ProjectGuid>
<OutputType>Exe</OutputType>
<OutputPath>bin\Debug\</OutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
* куча зависимостей может быть разобрана некорректно, особенно если они помечены как conditional symbols или спрятаны в Import.
В общем, если делать — посмотрите, как сделаны типизированные теги в OpenXml SDK (наследниками от XElement). Что-то более сложное будет выглядеть оверкиллом
2. Обработка csproj xml-патчем. Будет хорошо работать только при условии, что csproj не правился кардинально. Ну и кроме того, что-то я не припомню готовой реализации этого дела на шарпе.
Может, отказаться от этого функционала и сразу превращать пожелания по изменению проекта в код, который правит xml / семантическую модель?