В решении 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)
{
Словарь пуст, несмотря на то, что я могу открыть ресурс DLL в двоичном режиме и увидеть локализуемый тексттам.