Не удается загрузить потоки 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)
{

Словарь пустой, несмотря на то, что я могу открыть ресурсную библиотеку в двоичном режиме и увидеть там локализуемый текст.

0 ответов

Другие вопросы по тегам