我正在使用VS 2010的reportviewer控件来创建客户端报告(rdlc)。在我的开发机器上一切正常,当我手动编译(通过VS2010)并手动部署到没有安装开发工具的测试机器时。
为了让测试机器正常工作(不安装VS2010或ReportViewer.exe),我不得不在我的项目中添加对Microsoft.ReportViewer.Winforms,Microsoft.ReportViewer.Common和Microsoft.ReportViewer.ProcessingModel的引用。他们都是“复制本地”。
我有为Build Action配置的rdlc文件=>嵌入式资源。这是向项目添加新rdlc时的默认设置。我愿意配置这个,否则如果这可以解决这个问题(不知道它是否相关)。
问题:自添加rdlc文件以来,该解决方案不再构建在构建服务器上。我在构建服务器上安装了ReportViewer.exe,并验证了GAC中是否存在所需的程序集。 .Net 4框架未安装在构建服务器上 - 我不认为这是必需的,因为该解决方案针对3.5运行时。
我认为问题的根源是构建日志中的以下内容:
目标“RunRdlCompiler”:构建 完全定位“RunRdlCompiler”。 输出文件 “obj \ Release \ RdlCompile.compiled”确实如此 不存在。使用“RdlCompile”任务 从装配 “Microsoft.ReportViewer.Common, 版本= 9.0.0.0,文化=中立, PublicKeyToken = b03f5f7f11d50a3a“。任务 “RdlCompile”: Report \ RDLC \ GreenReport.rdlc(0,0): 错误rsInvalidReportDefinition: 报告定义无效。 详细信息:报告定义有一个 无效的目标命名空 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' 无法升级的。
据我所知,Microsoft.ReportViewer.Common版本10.0.0.0应该用于“编译”rdlc,但MSBuild似乎使用9.0.0.0。我相信如果我可以强制它使用正确的版本(安装在GAC中的IS),解决方案就会编译。
答案 0 :(得分:7)
这是因为您的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
,它指向10.0版本的ReportViewer程序集。
10.0 ReportViewer是针对.NET 3.5编译的,旨在兼容3.5和4.0。您很可能摆脱.NET 4.0框架,并将您的3.5公共目标文件更改为指向新的ReportingServices目标文件,它应该可以工作。无论如何,在理论上,我从未真正尝试过它。你可能最好只坚持4.0,因为这是我们为新观众设计MSBuild支持时的预期。
答案 1 :(得分:6)
只需安装Microsoft Report Viewer 2010 SP1。
答案 2 :(得分:4)
我有一个非常类似的问题。突然之间,我再也无法构建一个包含.rdlc文件的VS2010项目。我没有转换任何报告或使用报告服务器,一切都是本地的。我尝试创建一个全新的项目并添加一个空的新rdlc报告并点击构建,但它不起作用。只有一天它停止编译并给了我以下错误:
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.
原来问题是我的“C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ ReportingServices \ Microsoft.ReportingServices.targets”文件有所改变。我文件的顶部是:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.Common, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
应该是:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
我在文件中更改了一个“使用任务”行,所有内容都重新构建。非常沮丧,它吃了我生命中的两天。希望发布此评论可能会帮助处于类似情况的其他人。
Jim Lafler
答案 3 :(得分:3)
我尝试重新安装所有它并没有工作。然后,我尝试按照Jim的帖子更新 Microsoft.ReportingServices.targets ,但即使没有为我工作。
最后,我刚刚从其他计算机上复制了 Microsoft.ReportingServices.targets (它运行时没有错误)。令人惊讶的是,它正在发挥作用。
我在比较时注意到的其他差异,将 PublicKeyToken 与版本一起更改。
这可能只适用于我,但Jim的帖子非常有用。
SFUH
答案 4 :(得分:2)
原来我确实需要.Net 4.0 Framework,更具体地说是4.x版本的MSBuild,它使用较新版本的Microsoft.ReportViewer.Common库。
因此,即使您的目标是3.5框架,如果您使用VS2010创建rdlc,它也可能会使用4.0工具进行“编译”。
答案 5 :(得分:2)
我遇到了同样的问题:我们使用ReportViewer 2012(程序集的版本从11开始)。在本地机器和构建机器上都安装了ReportViewer 2012软件包和VisualStudio 2013.在本地机器上,VS中的编译成功,但在排队构建期间构建机器上MSBuild会抛出这样的错误:
The report definition is not valid. Details: The report definition has an invalid target
namespace 'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition'
which cannot be upgraded.
我尝试从.NET 3.5文件夹中修改Microsoft.Common.targets,这在本文中有所描述,但没有效果。然后我从.NET 4.0文件夹中打开了Microsoft.Common.targets,并找到了这样的字符串:
<!-- VS10 without SP1 and without VS11 will not have VisualStudioVersion set, so do
that here -->
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)'
==''">10.0</VisualStudioVersion>
</PropertyGroup>
然后我意识到问题可能是变量$(VisualStudioVersion)的值不正确,所以我在第34节中添加了构建定义;过程&#34;这个MSBuild参数:
/p:VisualStudioVersion=12.0
它有效!构建成功完成。 希望这会对某人有所帮助。
答案 6 :(得分:1)
粘贴文件路径似乎没有经过......怎么样:
当时:
TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.Common, Version=8.0.0.0...
现在是:
TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0...
詹姆斯
答案 7 :(得分:0)
我的devenv.exe.config中启用了NetFx40_LegacySecurityPolicy,当我注释掉这一行时,项目已成功构建。
我们已经在团队中启用了遗留安全策略,以使我们的团队能够在Visual Studio 2010中使用DevExpress 7.2控件,但在这种情况下,它表明我们采用的方法并不总是最好的。
答案 8 :(得分:0)
由于类似的问题,我失去了2天的开发时间。在构建我的项目时它会成功,但在重建时失败并没有错误。在“输出”窗口中调查详细的构建日志时,它指示我遇到rdlcompile函数的问题(因此报告服务本地报告嵌入问题)。在尝试了每件事之后我终于设法解决了这个问题,但禁用了我的病毒扫描程序。防病毒软件以某种方式干扰了我的重建并导致重建失败。
禁用病毒扫描后,重建工作100%
答案 9 :(得分:0)
我在Visual Studio 2013上遇到同样的问题。 我项目的报告服务的dll版本是Version = 10.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a
当我检查我的ReportingServices目标时
C:\ Program Files \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ ReportingServices \ Microsoft.ReportingServices.targets
我发现任务版本是11.0.0.0
<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
当我在我的项目中将任务版本更改为对应于dll版本的10.0.0.0时。
<UsingTask TaskName="Microsoft.Reporting.RdlCompile" AssemblyName="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
它&#39;工作
答案 10 :(得分:0)
我刚刚从我的文件系统中删除了这个文件。报告简单嵌入,无需编译。
<块引用>c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\V11.0\ReportingServices\Microsoft.ReportingServices.targets
这对我和我的构建服务器都很好。