NET Core 3.0中的BamlLocalizer无法加载资源dll流

时间:2019-06-27 06:37:16

标签: wpf .net-core locbaml

在Visual Studio 2019解决方案中,我创建了两个.NET Core 3.0 WPF项目。

首先,我添加了一个主窗口标题“ Hello”。我还将<UICulture>en-US</UICulture>行添加到.csproj文件并进行了编译。这导致创建了en-US \ First.resources.dll文件。

第二步,我在Github的locbaml源代码中添加了一大段代码(在启动时运行):

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复制到Second项目的bin \ Debug \ netcoreapp3.0文件夹中,将其设置为活动状态,然后单击debug。在执行最后一行时,它将引发:

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由于某种原因找不到的其他程序集。为什么要寻找第一次集会?

我之所以冒险,只是因为它似乎没有针对.NET core的locBaml工具。

更新: 我采用了上面的代码块,并将其直接放在First项目的启动方法中。然后,最后一行成功了-因此解决程序集显然存在问题。但是,只找到一个流,当我尝试从中提取资源时:

var dict = mgr.ExtractResources();

foreach (var entry in dict)
{

尽管我可以以二进制模式打开资源dll并在其中看到可本地化的文本,但是字典是空的。

0 个答案:

没有答案