Не удается загрузить потоки DLL ресурсов с помощью BamlLocalizer в.NET Core 3.0
В решении Visual Studio 2019 я создал два WPF-проекта.NET Core 3.0.
К первому я добавил заголовок главного окна "Привет". Я также добавил строку <UICulture>en-US</UICulture>
в файл.csproj и скомпилирован. Это вызвало создание файла en-US\First.resources.dll.
Во-вторых, я добавил кусок кода (который я запускаю при запуске), который я нашел в исходном коде locbaml на Github:
var streams = new List<Stream>();
var assembly = Assembly.LoadFrom(Environment.GetCommandLineArgs()[1]);
foreach (string resourceName in assembly.GetManifestResourceNames())
{
var resourceLocation = assembly.GetManifestResourceInfo(resourceName).ResourceLocation;
// if this resource is in another assemlby, we will skip it
if ((resourceLocation & ResourceLocation.ContainedInAnotherAssembly) != 0)
{
continue; // in resource assembly, we don't have resource that is contained in another assembly
}
Stream resourceStream = assembly.GetManifestResourceStream(resourceName);
using (var reader = new ResourceReader(resourceStream))
{
foreach (DictionaryEntry entry in reader)
{
string name = entry.Key as string;
if (BamlStream.IsResourceEntryBamlStream(name, entry.Value))
{
streams.Add((Stream)entry.Value);
}
}
}
}
foreach(var stream in streams)
{
var mgr = new BamlLocalizer(stream);
Где первый аргумент командной строки установлен в настройках отладки проекта на "First.resources.dll"
Я скопировал First.dll и First.resources.dll в папку bin\Debug\netcoreapp3.0 Второго проекта, установил его активным, а затем нажал "Отладка". После выполнения последней строки он выдает:
System.IO.FileNotFoundException: 'Could not load file or assembly 'First, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.'
Я предположил, что First.resources.dll существует независимо от любых других сборок и что он содержит только ресурсы. Однако, похоже, что он ссылается на другие сборки, которые BamlLocalizer
не могу найти по какой-то причине. Зачем искать Первую сборку?
Я решился на это далеко только потому, что, похоже, инструмент locBaml для ядра.NET не за горами.
Обновление: я взял вышеупомянутый блок кода и поместил его непосредственно в метод запуска в Первом проекте. Затем эта последняя строка завершается успешно - так что, очевидно, существует проблема, решающая сборку. Тем не менее, только один поток найден, и когда я пытаюсь извлечь ресурсы из него:
var dict = mgr.ExtractResources();
foreach (var entry in dict)
{
Словарь пустой, несмотря на то, что я могу открыть ресурсную библиотеку в двоичном режиме и увидеть там локализуемый текст.