Запустите пользовательский инструмент Visual Studio во время сборки - PullRequest
24 голосов
/ 21 мая 2009

У меня есть сценарий, который преобразует текстовый файл в файл ресурсов, поэтому у меня может быть поддержка нескольких языков, поскольку текстовые файлы для разных языков преобразуются в разные ресурсы. После запуска сценария для получения файла resx мне нужно запустить специальный инструмент сборки (как описано здесь: Ссылка на код проекта ), чтобы создать файлы Designer.cs для использования новых файлов. .

В соответствии с философией, согласно которой я должен иметь возможность собрать весь проект одним нажатием кнопки, как я могу удалить шаг, когда мне нужно явно вызывать пользовательский инструмент сборки, чтобы создавать файлы кода за кодом?

Я попытался автоматически удалить файлы Designer.cs в качестве шага перед сборкой, так как я думал, что пользовательский инструмент сборки будет запускаться автоматически, если не было файлов Designer.cs, но нет кубиков.

Итак, я хочу, чтобы мой скрипт сборки в Visual Studio / msbuild выполнял: 1) преобразовать текст в resx (сделано) 2) переместить файлы resx в соответствующий каталог (готово) 3) создавать файлы designer.cs с помощью специального инструмента сборки (не готово)

Это последний шаг ...

Ответы [ 3 ]

3 голосов
/ 22 мая 2009

К сожалению, я не думаю, что есть простой способ сделать это. Пользовательские инструменты сборки запускаются только из VS.NET - они не запускаются при сборке проекта с использованием MSBuild из командной строки.

В общем, если у вас есть выбор написания инструмента сборки в качестве инструмента сборки клиента или задачи MSBuild, выбирайте задачу MSBuild каждый раз, так как эти задачи будут выполняться в VS.NET и из командной строки.

Для поддержки вашего кода существуют файлы designer.cs для ресурсов. Они дают вам строго типизированный доступ к файлу ресурса. Таким образом, до тех пор, пока вы создаете свои инвариантные ресурсы культуры в VS.NET (и позволяете ему создавать файлы .designer.cs), добавление дополнительной языковой поддержки позднее (дополнительные файлы .resx) должно работать нормально.

Если, однако, ваши текстовые файлы являются вашими первичными файлами ресурсов, и вы сначала добавляете новые строки ресурсов в эти текстовые файлы, то вам нужно будет найти другой способ создания файлов .cs, которые позволят вам кодировать против эти ресурсы. Если бы вам пришлось это сделать, вы сами не сможете создать файл .designer.cs (или что-то подобное). Используя CodeDom или T4, вы можете создать вспомогательный класс, используя существующий файл .designer.cs в качестве шаблона.

2 голосов
/ 07 апреля 2017

Существует способ создать * .Designer.cs для * .resx как часть процесса сборки. Существует встроенная задача MSBuild GenerateResource , которая в основном является оболочкой для инструмента SDK resgen.exe. Здесь вы можете найти пример, как его использовать.

Еще одна вещь, которая может оказаться полезной, если сгенерированная версия * .Designer.cs является неправильной, в основном задача GenerateResource не вызывает нужную версию resgen.exe, настройка свойства SdkToolsPath может помочь .

0 голосов
/ 24 мая 2009

Вы пытались добавить шаг Exec в шаг Before / AfterBuild в вашем csproj? Вы должны вручную отредактировать файл для этого, но это должно решить вашу проблему.

Я не совсем понял, хотите ли вы, чтобы это было сделано до или после сборки. Если вам нужно это сделать через некоторое время после Pass1 / Pass2, вы можете подключиться к цели напрямую. Попробуйте заглянуть в Microsoft.Build.Common.Targets, чтобы понять, как это сделать.

...