У меня возникли проблемы при объединении сборок сателлитов локализации в библиотеку плагина для CRM2011.
Либо так, либо я не знаю, как впоследствии использовать объединенные ресурсы.
Я создаю несколько плагинов и создаю базовый файл ресурсов (по умолчанию - английский) и один для конкретной культуры (на момент написания он был для польских локализаций, но позже мне нужно будет добавить и французский).
Я обязуюсь не подписывать саму сборку, поскольку ILMerge подпишет саму законченную сборку.
Эта команда используется для объединения дополнительной сателлитной сборки:
ilmerge /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /log:log.txt /keyfile:KeyFile.snk /out:Plugins.dll DynamicsCRM2011.Plugins.dll pl-PL\DynamicsCRM2011.Plugins.resources.dll
AsВы можете видеть, что плагины находятся в .NET 4.0, и у меня есть требуемый файл .config для ILMerge, чтобы использовать необходимые сборки для слияния.
Сгенерированный файл выглядит нормально, я могу зарегистрировать его с помощью плагина CRM-регистратор, добавлять новые шаги и т. д.
Однако он всегда будет использовать язык по умолчанию.Я пытался изменить System.Threading.Thread.CurrentThread.UICulture
, но это не помогло.Когда я создал ResourceManager
класс и использовал GetString("ErrorMessage", new System.Globalization.CultureInfo("pl-PL"))
, я получил Exception
, что указанный ResourceManager
не знает, что делать с указанной культурой.
Я знаю этот вопрос здесь .Однако опубликованное решение кажется устаревшим.Сгенерированные файлы ресурсов .cs не используют ComponentResourceManager
.Кроме того, части кода, размещенного там, были помечены как устаревшие.
Я не совсем уверен, что я должен делать сейчас, или как дальше отлаживать это, так как у меня очень мало опыта, когда онприходит работать с самими сборками.Пожалуйста, помогите мне контролировать эти спутниковые сборки.
Обновление:
Я уже некоторое время работаю с плагинами песочницы, и поэтому ябольше не иметь доступа к таким вещам, как CurrentCulture
(или, по крайней мере, я не могу изменить такие вещи).Я попытался решить эту проблему еще раз: я создал простой плагин, который запускается при сохранении новой учетной записи.Ничего фантастического.Вот фактический код плагина:
ResourceManager rm = new ResourceManager(typeof(Properties.Resources));
var s = rm.GetString("ErrorAlreadyPosted", new System.Globalization.CultureInfo("pl-PL"));
throw new InvalidPluginExecutionException(s);
Код больше не выдает исключение из-за невозможности найти указанную культуру ... также код явно выдает исключение в конце, но важно то, чтоЧто такое сообщение об исключении.Я ожидаю, что это будет на польском языке.
Увы, это не так.Строка, возвращаемая GetString
, по-прежнему на английском языке.
Команда, которую я использовал для ILmerge, такая же, как и раньше, но с указанным параметром /lib
, поэтому мне не нужно копировать всю CRMSDK dlls ...