Как используется атрибут DesignTime у MSBuild Item ?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 24.04.17 07:47
Оценка:
Компания Микрософт разработала программу для автоматизации упорядоченной сборки зависимых друг от друга артефактов, она называется MSBuild. Для того, чтобы эта утилита начала что-то собирать, для собираемого проекта пишут декларативное описание, в котором перечислены собираемые артефакты (MSBuild Item-ы) и инструкции по сборке (MSBuild Task-и).
Описание проекта для языка C# хранится в файлах с расширением .csproj и используется не только утилитой MSBuild, но и различными IDE, такими как MonoDevelop и Visual Studio.
Документация на программу MSBuild не покрывает особенностей использования файлов описания в этих IDE.

фрагмент кода:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- ... -->
  <ItemGroup>
    <Compile Include="MyGeneratedCode.cs">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>MyLanguage.Language.grammar.y</DependentUpon>
    </Compile>
  </ItemGroup>
  <!-- ... -->
</Project>


Здесь мы видим группу MSBuild Item, с именем "Compile" и дополнительными атрибутами AutoGen, DesignTime, DependentUpon.
Эти атрибуты упомянуты в файле Microsoft.Build.Commontypes.xsd, но без комментариев.

Собственно, научите меня, пожалуйста, как искать в MSDN. Ввожу How DesignTime attribute of MSBuild Item is used?, но подходящих результатов не вижу.

Страницы отдельных классов, например, ProjectItem Class, ProjectItemDefinition Class документированием смежных тем не заморачиваются.

на странице про интеграцию говорится, что существует некий Project Designer, но гиперссылки на его описание нет.

Ты головой, головой думай, подсказывают соседи. Не получается. Прошу помощь зала форума.
Отредактировано 24.04.2017 7:53 Эйнсток Файр . Предыдущая версия .
Re: Как используется атрибут DesignTime у MSBuild Item ?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 24.04.17 11:25
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Собственно, научите меня, пожалуйста, как искать в MSDN. Ввожу How DesignTime attribute of MSBuild Item is used?, но подходящих результатов не вижу.

Никак.
То, что вы перечислили (AutoGen, DesignTime, DependentUpon) в терминологии MSBuild называется метаданными. Это дополнительная информация, которая никак не станадртизуется, причем т.к. MSBuild-файлы использует не только MSBuild, но и самой Visual Studio, эти метаданные могут быть нужны только самой IDE.
Всё, что вы можете это посмотреть какие Task используют на входе коллекцию Compile и по их коду попробовать определить, для чего этот элемент метаданных может использоваться.

А вообще, на будущее я бы рекомендовал взять книгу по основам MsBuild (например https://www.microsoftpressstore.com/store/inside-the-microsoft-build-engine-using-msbuild-and-9780735645240) и определиться с основными понятиями Properties/Items/Targets/Tasks/...
А справочные сведения смотреть по оглавлению здесь https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild
Re[2]: Как используется атрибут DesignTime у MSBuild Item ?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 24.04.17 12:04
Оценка:
ЭФ>> Документация на программу MSBuild не покрывает особенностей использования файлов описания в этих IDE.
МР> То, что вы перечислили (AutoGen, DesignTime, DependentUpon) в терминологии MSBuild называется метаданными.
МР> Это дополнительная информация, которая никак не станадртизуется, причем т.к. MSBuild-файлы использует не только MSBuild, но и самой Visual Studio,
МР> эти метаданные могут быть нужны только самой IDE.

Да, большое спасибо, что подтвердили то, что уже написано в моём сообщении.

МР> посмотреть какие Task используют на входе коллекцию Compile и по их коду попробовать определить


полезная идея.
https://github.com/Microsoft/msbuild/blob/6851538897f5d7b08024a6d8435bc44be5869e53/src/Tasks/XamlRules/CSharp.xaml#L82

DesignTime — A value indicating whether this file has a designer.


Мне хотелось бы повторить вопрос — где описано, как используется (должен использоваться) атрибут DesignTime в IDE ?

Теперь я хочу увидеть для чего он нужен на самом деле на примере кода MonoDevelop (внутренний голос подсказывает — надо брать и смотреть код).

Но нет, в MonoDevelop — нигде не используется для полезных целей:
https://github.com/mono/monodevelop/search?q=DesignTime
Отредактировано 24.04.2017 12:18 Эйнсток Файр . Предыдущая версия . Еще …
Отредактировано 24.04.2017 12:13 Эйнсток Файр . Предыдущая версия .
Отредактировано 24.04.2017 12:10 Эйнсток Файр . Предыдущая версия .
Re[3]: Как используется атрибут DesignTime у MSBuild Item ?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 24.04.17 12:17
Оценка: +1
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Теперь мне хотелось бы повторить вопрос — где описано, как используется (должен использоваться) атрибут DesignTime в IDE ?

Думаю, что нигде.
Внутренние механизмы VS описываются только в части разработки собственных расширений. И если в MS не предполагали открывать данный мехнизм наружу, то нигде он описан и не будет (хотя то, что его включили в XSD схему говорит, что скорее всего это частый элемент).

А вообще какой смысл именно в таком подходе — досконально изучать каждый из представленных элементов? Обычно идут от задачи: описывают что надо, а потом смотрят какие есть для этого инструменты?

Или вы хотите сделать редактор MSBuild файлов?
Re[4]: Как используется атрибут DesignTime у MSBuild Item ?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 24.04.17 12:35
Оценка:
МР> А вообще какой смысл именно в таком подходе — досконально изучать каждый из представленных элементов?

Мне в руки попал код, оставленный ушельцами.
Там применяется инопланетянская логика (я бы делал не так).

Есть идея переделать по-другому, но при переделке животные не должны пострадать.
Поэтому нужно понимать, что я теряю внося изменения (замещая код другим).
Re[5]: Как используется атрибут DesignTime у MSBuild Item ?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 24.04.17 13:00
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Поэтому нужно понимать, что я теряю внося изменения (замещая код другим).

Ясно.
Боюсь, что тогда у вас остается только путь поиска в сети (но я с ходу особо ничего не нашел) или анализа поведения студии при замене этих атрибутов.
Ну в тасках MSBuild посмотреть тоже стоит.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.