MSB4062:无法从程序集加载"Microsoft.Reporting.RdlCompile"任务 Microsoft.ReportViewer.WebForms, Version=15.0.0.0



有几个类似的堆栈溢出帖子与此问题相似但不完全相同:

  • TFS:"Microsoft.Reporting.RdlCompile"任务无法从程序集加载 Microsoft.ReportViewer.WebForms, Version=11.0.0.0
  • 未找到"RdlCompile"任务
  • 程序集引用无法在我们的生成服务器上正确解析

我们有Microsoft RDLC报表设计器(https://marketplace.visualstudio.com/items?itemName=ProBITools.MicrosoftRdlcReportDesignerforVisualStudio-18001(,并且正在使用Visual Studio 2019。

尝试使用64 位版本的 MSBuild生成某些 RDLC 报告时,我们生成失败并显示以下错误:

C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildMicrosoftVisualStudiov16.0ReportingServicesMicrosoft.ReportingServices.targets(24,2):
error MSB4062: The "Microsoft.Reporting.RdlCompile" task could not be loaded from the assembly Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91.
Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies.
The system cannot find the file specified. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask.

加载 fuslogvw 会显示以下绑定日志:

*** Assembly Binder Log Entry  (5/13/2020 @ 4:06:22 PM) ***
The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.
Assembly manager loaded from:  C:WindowsMicrosoft.NETFramework64v4.0.30319clr.dll
Running under executable  C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinamd64MSBuild.exe
--- A detailed error log follows. 
=== Pre-bind state information ===
LOG: DisplayName = Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91
(Fully-specified)
LOG: Appbase = file:///C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/amd64/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = MSBuild.exe
Calling assembly : Microsoft.Build, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinamd64MSBuild.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:WindowsMicrosoft.NETFramework64v4.0.30319configmachine.config.
LOG: Post-policy reference: Microsoft.ReportViewer.WebForms, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/amd64/Microsoft.ReportViewer.WebForms.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/amd64/Microsoft.ReportViewer.WebForms/Microsoft.ReportViewer.WebForms.DLL.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/amd64/Microsoft.ReportViewer.WebForms.EXE.
LOG: Attempting download of new URL file:///C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/Bin/amd64/Microsoft.ReportViewer.WebForms/Microsoft.ReportViewer.WebForms.EXE.
LOG: All probing URLs attempted and failed.

查看 VSIX 安装日志 (dd_setup_20200513155525_001_617ad572-c5b7-415c-b166-b2969077f719( 并筛选已安装的 DLL 将显示以下内容:

Completed: Copying file /$MSBuild/15.0/bin/Microsoft.ReportViewer.Common.dll to C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuild15.0binMicrosoft.ReportViewer.Common.dll
Completed: Copying file /$MSBuild/15.0/bin/Microsoft.ReportViewer.ProcessingObjectModel.dll to C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuild15.0binMicrosoft.ReportViewer.ProcessingObjectModel.dll
Completed: Copying file /$MSBuild/15.0/bin/Microsoft.ReportViewer.WebForms.dll to C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuild15.0binMicrosoft.ReportViewer.WebForms.dll
Completed: Copying file /$MSBuild/15.0/bin/Microsoft.SqlServer.Types.dll to C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuild15.0binMicrosoft.SqlServer.Types.dll
Completed: Copying file /$MSBuild/Current/Bin/Microsoft.ReportViewer.Common.dll to C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMicrosoft.ReportViewer.Common.dll
Completed: Copying file /$MSBuild/Current/Bin/Microsoft.ReportViewer.ProcessingObjectModel.dll to C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMicrosoft.ReportViewer.ProcessingObjectModel.dll
Completed: Copying file /$MSBuild/Current/Bin/Microsoft.ReportViewer.WebForms.dll to C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMicrosoft.ReportViewer.WebForms.dll
Completed: Copying file /$MSBuild/Current/Bin/Microsoft.SqlServer.Types.dll to C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMicrosoft.SqlServer.Types.dll

根本原因似乎是 MSBuild 探测路径的 64 位版本期望任务存在于 64 位文件夹中,但 VSIX 安装程序不会将它们放置在那里。

要变通解决此问题,请手动复制以下文件:

C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMicrosoft.ReportViewer.Common.dll
C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMicrosoft.ReportViewer.ProcessingObjectModel.dll
C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMicrosoft.ReportViewer.WebForms.dll
C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinMicrosoft.SqlServer.Types.dll

进入 64 位版本的 MSBuild Bin 在C:Program Files (x86)Microsoft Visual Studio2019EnterpriseMSBuildCurrentBinamd64

这已报告给Microsoft(BI 组 [通过电子邮件] 和 MSBuild 以了解探测位置的期望(。

最新更新