我正在使用VS 2010中的ReportViewer控件创建客户端报告(rdlc)。在我的开发机器上一切正常,当我手动编译(通过VS2010)并手动部署到没有安装开发工具的测试机器上也能正常工作。
为了让测试机器正常工作(无需安装VS2010或ReportViewer.exe),我必须将项目中的引用添加到Microsoft.ReportViewer.Winforms、Microsoft.ReportViewer.Common和Microsoft.ReportViewer.ProcessingModel,并将它们全部设置为“Copy Local”。
我已经为rdlc文件配置了Build Action => 嵌入式资源。这是添加新rdlc到项目时的默认设置。如果这可以解决问题(不知道是否相关),我可以进行其他配置。
问题是:自从添加了rdlc文件后,解决方案就无法在构建服务器上构建。我已经在构建服务器上安装了ReportViewer.exe,并验证了所需程序集是否存在于GAC中。构建服务器上没有安装.NET 4框架 - 我认为这不是必需的,因为解决方案的目标是3.5运行时。
我认为问题的根源在于构建日志中的以下内容:
Target "RunRdlCompiler": Building target "RunRdlCompiler" completely. Output file "obj\Release\RdlCompile.compiled" does not exist. Using "RdlCompile" task from assembly "Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Task "RdlCompile": Report\RDLC\GreenReport.rdlc (0,0): error rsInvalidReportDefinition: The report definition is not valid. Details: The report definition has an invalid target namespace 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' which cannot be upgraded.
据我所知,Microsoft.ReportViewer.Common版本10.0.0.0应该用于“编译”rdlc文件,但是MSBuild似乎在使用9.0.0.0版本。我相信如果我能强制它使用正确的版本(已安装在GAC中),解决方案将可以编译。