DotNet · 2022年5月8日

RDLC 本地报表引用自定义程序集需要注意的问题(部份验证)

一、在本地报表引用相同的程序集则编译时报类似如下错误:

加载代码模块时出错:“RSCustomLib, Version=1.0.0.0, Culture=neutral, 
PublicKeyToken=null”。详细信息: 未能加载文件或程序集“RSCustomLib, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
这时,需要将本地报表的自定义程序集部署为GAC方式。

二、本地报表使用自定义程序集部署步骤:

1.打开自定义的程序集项目;
2.对托管程序集进行强签名(您可以使用SDK命令:>sn /K c:\key.snk然后将Key.snk添加到项目并签名,或在VS project->properties->signing中进行签名)
3.保存并编译。
4.在运行的计算机的GAC中安装程序集。(您可以使用VS Command:>gacutil /i AssemblyName.dll,也可以直接把dll拖入C:\Windows\assembly文件夹)
(PS:不放GAC好像也可以,复制到C:\Program Files\Microsoft Visual Studio 9\Common7\IDE\PrivateAssemblies下(仅VS在编译时使用,实际运行时不需要),还需要在前端使用本地报表(或者说使用ReportViewer控件)的工程引用该程序集;当然bin\debug目录下需要存在该dll文件)

接着,在本地报表文件(.rdlc)中选中报表单击报表属性切到引用页,引用刚才编译的dll文件,设置号类名(如RSCustomLib.TestClass)、实例名(如myTestClass);
然后在需要使用的位置如报表的文本框设置其值(如表达式:=Code.myTestClass.GetHello());
另外,需要强调的是您需要使用在显示报表前使用LocalReport.ExecuteReportInCurrentAppDomain(AppDomain.CurrentDomain.Evidence);
及LocalReport.AddTrustedCodeModuleInCurrentAppDomain() 来添加程序集为信任程序集。
如:

reportViewer1.LocalReport.ExecuteReportInCurrentAppDomain(AppDomain.CurrentDomain.Evidence);
this.reportViewer1.LocalReport.AddTrustedCodeModuleInCurrentAppDomain(
    "RSCustomLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f1252188e7ed8fc3"); 

PublicKeyToken等值需要根据您部署在GAC的相应值设置;

以上部分,是查询资料得来的,后来,经过尝试,在引用函数的地方,通过new 空间名.类名(【参数】).方法名(【参数】),也是行得通的。在显示报表方面,无需再添加其他操作。

运行可能还会报错“该程序集不支持部分受信任的调用方”。

加入到aeembly里面后程序会报“该程序集不支持部分受信任的调用方”的错误,原因是引用dll需要将信任级别提高。如果是我们在vs2008测试的话:应该将地址C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies下的RSPreviewPolicy.config文件的文本Name=”Report_Expressions_Default_Permissions”将其上面一行内容修改为PermissionSetName=”FullTrust”。

三、服务器端报表部署使用该自定义程序集的步骤:

1、copy RSCustomLib(自己编译的dll).* “C:\Program Files\Microsoft SQL Server\MSSQL.3(因个人的命名而有所不同)\Reporting Services\ReportServer\bin”
2、服务器报表的自定义程序集如使用打开文件、访问SQL资源等还必须作下面的设置(原因RS对于表达式默认执行权限是“Execution”,需要修改为“FullTrust”):
还需要设置安全性,将FullTrust安全许可赋予报表表达式(注意:这是高风险操作,在生产环境最好不要使用):
修改下面文件C:\Program Files\Microsoft SQL Server\MSSQL.4\Reporting Services\ReportServer\rssrvpolicy.config
在该文件中查找文本Name=”Report_Expressions_Default_Permissions”将其上面一行内容修改为PermissionSetName=”FullTrust”;

3、其次还需在该文件(rssrvpolicy.config)的倒数第2个</CodeGroup>前增加一段引用自定义程序集的内容:
<CodeGroup class=”UnionCodeGroup” version=”1″ PermissionSetName=”FullTrust” Description=”This special code group grants RSCustomLib.dll FUllTrust permission. “>
<IMembershipCondition class=”UrlMembershipCondition” version=”1″ Url=”C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin\RSCustomLib.dll” />
</CodeGroup>

我尝试的环境是Sharepoint2010与reporting service的集成,用的开发报表工具vs2008,数据库是用sql server 2008


其中,尝试DLL文件直接复制到C:\Windows\assembly文件夹是不行的,需要通过部署命令才能部署

最新电影,电视剧,尽在午夜剧场

电影电视剧午夜不寂寞