我正在使用 VS 2010 中的 reportviewer 控件来创建客户端报告 (rdlc)。在我的开发机器上一切正常,当我手动编译(通过 VS2010)并手动部署到没有安装开发工具的测试机器时。
为了让测试机正常工作(无需安装 VS2010 或 ReportViewer.exe),我必须在项目中添加对 Microsoft.ReportViewer.Winforms、Microsoft.ReportViewer.Common 和 Microsoft.ReportViewer.ProcessingModel 的引用,并将它们全部添加到“复制本地”。
我为构建操作配置了 rdlc 文件 => 嵌入资源。这是向项目添加新 rdlc 时的默认设置。我愿意配置这个,否则如果这可以解决这个问题(不知道它是否相关)。
问题:自从添加 rdlc 文件后,解决方案不再在构建服务器上构建。我已在生成服务器上安装了 ReportViewer.exe,并验证了 GAC 中是否存在所需的程序集。 .Net 4 框架未安装在构建服务器上——我认为这不是必需的,因为该解决方案针对的是 3.5 运行时。
我认为问题的根源在于构建日志中的以下内容:
目标“RunRdlCompiler”:构建
完全针对“RunRdlCompiler”。
输出文件
“obj\Release\RdlCompile.compiled”确实
不存在。使用“RdlCompile”任务
从装配
“微软.ReportViewer.Common,
版本=9.0.0.0,文化=中立,
PublicKeyToken=b03f5f7f11d50a3a”。任务
“Rdl编译”:
报告\RDLC\GreenReport.rdlc (0,0):
错误 rsInvalidReportDefinition:
报告定义无效。
详细信息:报告定义有一个
无效的目标命名空间
'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition'
无法升级。
据我所知,Microsoft.ReportViewer.Common 版本 10.0.0.0 应该用于“编译”rdlc,但 MSBuild 似乎使用 9.0.0.0。我相信,如果我可以强制它使用正确的版本(安装在 GAC 中),该解决方案就能编译。
这是因为您的 Microsoft.Common.Targets 文件指向 9.0 版本的程序集。
如果你查看 [sysdir]\Microsoft.NET\Framework\v3.5 你会发现Microsoft.Common.targets
,这推动了 MSBuild 的许多工作。此版本的通用目标文件指向[Program Files]\MSBuild\Microsoft\VisualStudio\v9.0\ReportingServices\Microsoft.ReportingServices.targets
强制 MSBuild 以 9.0 版本运行。
当您安装 .NET 4.0 时,您会在 v4.0.x 目录中获得一个新的通用目标文件,这个新文件现在指向[Program Files]\MSBuild\Microsoft\VisualStudio\v10.0\ReportingServices\Microsoft.ReportingServices.targets
它指向 ReportViewer 程序集的 10.0 版本。
10.0 ReportViewer 是针对 .NET 3.5 编译的,旨在在 3.5 和 4.0 中工作。您很可能摆脱 .NET 4.0 框架,并更改 3.5 通用目标文件以指向新的 ReportingServices 目标文件,并且它应该可以工作。无论如何,从理论上讲,我从未真正尝试过。您可能最好坚持使用 4.0,因为这就是我们为新查看器设计 MSBuild 支持时的意图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)