2009-05-21 2 views
24

У меня есть сценарий, который преобразует текстовый файл в файл ресурсов, чтобы я мог поддерживать несколько языков, имея текстовые файлы для разных языков, преобразованных в разные ресурсы. Как только я запустил скрипт для получения файла resx, я должен запустить специальный инструмент сборки (как описано здесь: Link to Code Project), чтобы создать файлы Designer.cs для использования новых файлов.Запуск пользовательского инструмента Visual Studio во время сборки

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

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

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

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

ответ

3

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

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

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

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

0

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

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

2

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

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

Смежные вопросы