Запуск специального инструмента Visual Studio во время сборки

StackOverflow https://stackoverflow.com/questions/894806

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top