分享一个同事今天碰到的问题。
水晶报表的项目,采用strongtyped report。运行的时候,总是报错。
Dim crInventoryListReport as New InventoryList() ' 报表文件
CrystalReportViewer1.ReportSource = crInventoryListReport
查了一下BO的kb,只有一篇文章说采用强类型的report 的时候,改report 的buildanction要选择嵌入的资源。这一点没有问题,看了一下设置,他也设置了嵌入。
http://support.businessobjects.com/library/kbase/articles/c2012623.asp
可是就是会报错,说再资源清单中找不到该report。
我用ildasm 看了一下资源也都在,其实这种问题,一定是namespace 的问题。
其实报错,主要的原因就是你的report 后面的cs文件的namespace一定要根rpt文件所在的namespace一致(主要是目录结构)
具体可以这样看一下。
编译你的exe,比如 a.exe
ildasm a.exe /out:a.il
看一下他会dump出所有的资源文件,看一下你的rpt文件名。比如是 MontaqueInc.ProjectA.InventoryList.rpt
请保证你的InventoryList.cs 文件的namespace是 MontaqueInc.ProjectA就可以了。
主要代码其实就是:
Type type1 = base.GetType();
Stream stream2 = type1.Module.Assembly.GetManifestResourceStream(type1, this.ResourceName);
reportclass 所在的namespace来匹配资源文件。
比较遗憾的是,发生这种情况大部分是我提到的这种reason,而bo和微软并没有提供相关的kb,看了一下ms的新闻组,很多这样的问题都没有被answer。:(
水晶报表的项目,采用strongtyped report。运行的时候,总是报错。
Dim crInventoryListReport as New InventoryList() ' 报表文件
CrystalReportViewer1.ReportSource = crInventoryListReport
查了一下BO的kb,只有一篇文章说采用强类型的report 的时候,改report 的buildanction要选择嵌入的资源。这一点没有问题,看了一下设置,他也设置了嵌入。
http://support.businessobjects.com/library/kbase/articles/c2012623.asp
可是就是会报错,说再资源清单中找不到该report。
我用ildasm 看了一下资源也都在,其实这种问题,一定是namespace 的问题。
其实报错,主要的原因就是你的report 后面的cs文件的namespace一定要根rpt文件所在的namespace一致(主要是目录结构)
具体可以这样看一下。
编译你的exe,比如 a.exe
ildasm a.exe /out:a.il
看一下他会dump出所有的资源文件,看一下你的rpt文件名。比如是 MontaqueInc.ProjectA.InventoryList.rpt
请保证你的InventoryList.cs 文件的namespace是 MontaqueInc.ProjectA就可以了。
主要代码其实就是:
Type type1 = base.GetType();
Stream stream2 = type1.Module.Assembly.GetManifestResourceStream(type1, this.ResourceName);
reportclass 所在的namespace来匹配资源文件。
比较遗憾的是,发生这种情况大部分是我提到的这种reason,而bo和微软并没有提供相关的kb,看了一下ms的新闻组,很多这样的问题都没有被answer。:(
浙公网安备 33010602011771号