.NET资源和动态资产净值

时间:2017-06-21 08:34:35

标签: c# .net microsoft-dynamics

我有一个项目,可以用作Dynamics NAV的插件。 它应该以当前使用的语言显示,英语是标准。 为了确保这一点,我有一个设置CurrentCulture和CurrentUICulture的方法。

在Dynamics NAV外部运行的测试项目中,表单会显示相应的翻译。

在动态资产净值中使用加载项时,表单总是英文,显示当前文化和当前UI文化被设置为正确的语言(我在多种情况下通过调试来检查)。

我尝试了两种设置:

  • 可本地化的表单,其中form1包含form1.resx和form1.de.resx
  • resx-files resources.resx和resources.de.resx,它们与Form1分离,并在InitializeComponent之后立即在代码中调用。

两种情况下结果相同:
在资产净值之外启动程序:翻译成功
从NAV内部启动程序:始终使用标准资源

有没有人知道我是否遗漏了一个细节?

1 个答案:

答案 0 :(得分:0)

问题是一个非常常见的问题:去资源被编译成“de”文件夹,结果NAV(就像经常那样)无法找到文件。

AssemblyResolve解决了这个问题:

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    var location = Path.Combine(
        Path.GetDirectoryName(typeof(MyForm).Assembly.Location),
        CultureInfo.CurrentCulture.Parent.Name,
        args.Name.Substring(0, args.Name.IndexOf(",", StringComparison.OrdinalIgnoreCase)) + ".dll");

    if (File.Exists(location))
    {
        return Assembly.LoadFrom(location);
    }

    return null;
    }
}

要记住的唯一细节是在执行InitializeComponent函数之前订阅AssemblyResolve。