После переименования встроенных файлов ресурсов с незначительными именами (WelcomeA.rtf и WelcomeB.rtf), чтобы они содержали коды языков (Welcome.en-us.rtf и Welcome.de-de.rtf), сборка .NET начала разделять мои ресурсы на [ Файлы AppName].resources.dll, расположенные в подпапке с языковой кодировкой выходного каталога. Папок de-de и en-us раньше не было и я только переименовывал исходные файлы, не меняя настройки проекта:
D:\[AppName]\BIN\DEBUG\NET5.0-WINDOWS
│ [AppName].deps.json
│ [AppName].dll
│ [AppName].exe
│ [AppName].pdb
│ [AppName].runtimeconfig.dev.json
│ [AppName].runtimeconfig.json
│
├───de-de
│ [AppName].resources.dll
│
├───en-us
│ [AppName].resources.dll
│
└───ref
[AppName].dll
Мое приложение не поддерживает шаблон I18N, который Visual Studio пытается реализовать здесь.
Я находил и загружал встроенный документ в RichTextBox, делая что-то вроде этого, которое теперь не работает:
private void LoadWelcomeText(string langCode)
{
Assembly assembly = Assembly.GetExecutingAssembly();
richTextBox.Document.Blocks.Clear();
foreach (string s in assembly.GetManifestResourceNames())
{
if (s.Contains("Welcome." + langCode + ".rtf"))
{
Stream stream = assembly.GetManifestResourceStream(s);
richTextBox.Selection.Load(stream, DataFormats.Rtf);
break;
}
}
}
Как я могу заставить процесс сборки не реструктурировать архитектуру моего приложения на основе имен исходных файлов?
(Я знаю, что переименование файлов не соответствует шаблону, используемому здесь для угадывания намерения I18N, но я хотел бы решить проблему, а не обойти ее.)
Спасибо, @Sinatr. Я знаю о спутниковых сборках, но большинство ресурсов о них (включая тот, на который вы ссылаетесь) показывают вам, как преодолеть трудности, чтобы заставить их работать. Я бы хотел избежать общения с ними. Я хочу создать небольшое однократно запускаемое приложение, которое должно иметь небольшой флажок в углу, позволяющий менять словари ресурсов для перевода пользовательского интерфейса XAML с динамическими ресурсами. А еще есть текстовый документ, который нужно поменять в коде. Имя файла ресурса также является строкой динамического ресурса. Сборки в GAC устанавливать не нужно, ИМХО :-)
Установите ресурс WithCulture в файле csproj.
<EmbeddedResource Include = "Resources\Welcome.en-us.rtf" WithCulture = "false" />
Гоша, спасибо! После того, как вы сказали мне, что искать (WithCulture), я нашел этот более старый пост с той же проблемой. Как это свойство не отображается в окне «Свойства» в VS 2019? Отражение, кто-нибудь? Вам необходимо отредактировать файл проекта в текстовом редакторе. Я вернулся к C# спустя более 10 лет, а VS до сих пор ощущается как какой-то инди-проект на Kickstarter.
Эти библиотеки DLL с ресурсами для конкретного языка называются сателлитными сборками . Вы можете попробовать найти темы с этим именем, например. вот один.