Я использую VS 2013 для создания приложения C # WinForms, которое поставляется в виде одного EXE-файла. До сих пор это не было проблемой с использованием ilmerge в качестве этапа после сборки, чтобы включить все необходимые библиотеки DLL. Даже компоненты ActiveX можно без проблем встраивать.
Но теперь я собираюсь интернационализировать приложение, что приведет к созданию локализованных сборок вспомогательных ресурсов. Мое текущее решение выглядит следующим образом:
- Сборка генерирует DLL под (например) ....._ 1_
- Действие после сборки копирует эту DLL в
..\..\Resources\i18n\en
В следующий раз, когда выполняется сборка, она встраивает ресурс в папку ресурсов i18n\en
как встроенный ресурс в целевой объект. В своем приложении я использую свой собственный ResolveEventHandler
для события AppDomain.CurrentDomain.AssemblyResolve
, читая запрошенную DLL из внутренних ресурсов приложения.
Это работает нормально, НО: после фиксации изменений, связанных с локализованной DLL, мне нужно дважды построить решение, чтобы поместить новую DLL в выходной EXE.
Использование ilmerge
для включения вспомогательных сборок не удалось, поскольку оно распаковывает библиотеки DLL и помещает содержащиеся в них объекты непосредственно в EXE-файл.
Итак, мой вопрос заключается в том, могу ли я изменить файл .csproj таким образом, чтобы после создания DLL я мог скопировать его в каталог ресурсов до, когда ресурсы были упакованы в выходной двоичный файл вместо копирования после первой сборки. Таким образом, потребуется всего один проход сборки и можно будет избежать ошибок.