RDLC报告 - 如何使用报告中的自定义代码访问本地化字符串值

时间:2017-11-02 20:33:13

标签: asp.net webforms rdlc reportviewer

所有

我正在从.net 2升级到.net 4.6,但我的RDLC(即本地)报告存在问题。

具体来说,我的RDLC报告来自我的一个程序集的参考代码,该程序集执行特定于语言的.resx文件的访问。这允许我创建报告表达式,以独立于语言的方式引用特定于语言的字符串,单词。

一切顺利,直到我们从.net 2切换到.net 4.随着新的CAS更改,我被迫重写代码,专门添加一个汇编引用:

report.AddTrustedCodeModuleInCurrentAppDomain();

到此:

SetBasePermissionsForSandboxAppDomain();
AddFullTrustModuleInSandboxAppDomain();

但是现在我发现这导致我的自定义DLL在没有当前HTTP上下文的情况下第二次加载到报表中。没有当前的HTTP上下文,我无法通过以下方式访问我的字符串.resx文件:

String localizedValue =
                (string)HttpContext.GetGlobalResourceObject(
                    resourceFile, resourceKey);

因此,我有一些选择,但需要指导如何完成这些:

BTW,通过参数传递lang特定字符串不是一个选项,因为我有很多字符串,这意味着很多自定义参数。

1)从我的.resx文件中检索lang特定字符串的另一种方法(我可以在没有HttpContext.GetGlobalResourceObject的情况下调用另一种方法)吗?或者我必须手动编写加载.resx文件并解析它们(这将是很多工作)

2)以某种方式在我的报告的上下文中获取当前的HTTP上下文。我试图在这里聪明并创建一个静态ctor,我将静态变量初始化为当前的HTTP上下文。不幸的是,这不起作用,因为当报表引擎评估报表中的表达式时,它似乎加载了同一程序集的另一个版本(观察我正在调试它)。

3)您建议的另一种解决方案。

1 个答案:

答案 0 :(得分:0)

在探索各种可能的可能性之后,最优雅的解决方案是创建语言字符串的附属程序集,然后按照建议使用ResourceManager类来加载程序集并从另一个程序集中检索字符串。

供参考: 为此,您需要将bin组件放在bin文件夹中。