Re[14]: API и слоёные архитектуры
От: Sinix  
Дата: 14.09.16 17:36
Оценка:
Здравствуйте, 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 / семантическую модель?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.