C# 如何从dll中获取.RDLC文件并将其置于reportviewer控件中?

C# 如何从dll中获取.RDLC文件并将其置于reportviewer控件中?,c#,sharepoint,reflection,reporting-services,reportviewer,C#,Sharepoint,Reflection,Reporting Services,Reportviewer,我有以下两个项目: 第一:所有报告(rdlc文件)都在这里 第二:SharePoint 2010显示我的报告的解决方案 我使用以下代码访问dll中的RDLC文件,并将其放入第二个项目中SharePoint应用程序页面中的reportviewer控件中: Assembly assembly = Assembly.LoadFrom("ReportsLib.dll"); Stream stream = assembly.GetManifestResourceStream("ReportsLib.M

我有以下两个项目:

第一:所有报告(rdlc文件)都在这里

第二:SharePoint 2010显示我的报告的解决方案

我使用以下代码访问dll中的RDLC文件,并将其放入第二个项目中SharePoint应用程序页面中的
reportviewer
控件中:

Assembly assembly = Assembly.LoadFrom("ReportsLib.dll");
Stream stream = assembly.GetManifestResourceStream("ReportsLib.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);
当我想从
ReportsLib
(例如:MyReport.rdlc)获取rdlc文件并将其置于SharePoint应用程序页面的reportviewer控件中时,出现以下错误:

[FileNotFoundException: Could not load file or assembly 'file:///c:\windows\system32\inetsrv\ReportsLib.dll' or one of its dependencies. The system cannot find the file specified.]
   System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
   System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +416
   System.Reflection.Assembly.LoadFrom(String assemblyFile) +52
   HRS.ReportsViewer.Layouts.ShowReport.Page_Load(Object sender, EventArgs e) +77
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
   System.Web.UI.Control.OnLoad(EventArgs e) +132
   Microsoft.SharePoint.WebControls.UnsecuredLayoutsPageBase.OnLoad(EventArgs e) +101
   Microsoft.SharePoint.WebControls.LayoutsPageBase.OnLoad(EventArgs e) +49
   System.Web.UI.Control.LoadRecursive() +66
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428

我做错了什么?

程序集名称似乎是
ReportsLib
,假设您使用了默认名称空间,则需要进行如下调整:

var assembly = Assembly.LoadFrom("ReportsLib.dll");
var stream = assembly.GetManifestResourceStream("ReportsLib.MyReport.rdlc");
reportViewer.LocalReport.LoadReportDefinition(stream);
此外,如果将
MyReport.rdlc
移动到文件夹中,则还需要添加一个虚线文件夹路径,即

GetManifestResourceStream("ReportsLib.SomeFolder.MyReport.rdlc");
编辑如果已添加程序集,请尝试提供完全限定的程序集名称,例如

 var assembly = Assembly.LoadFrom("ReportsLib.dll, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxx");
您可以使用以下方法之一获取FQN:

thnx,请检查我编辑的问题。这是我的错误,但在我使用的代码中,
ReportsLib
ReportsLib.dll
已部署在shrepoint bin文件夹和GAC中。出现了另一个错误:
无法加载文件或程序集'file:///c:\windows\system32\inetsrv\ReportsLib.dll,版本=1.0.0.0,区域性=中性,PublicKeyToken=xxxxxxxxxxxx'或其依赖项之一。系统找不到指定的文件
您确实用程序集FQN中的实际属性替换了
xxx
和版本,对吗?我用
xxx
替换了real
PublicKeyToken
version
,我从
C:\Windows\assembly
(GAC)文件夹获取它们。