C# 在ASP.net Mvc应用程序的IIS中部署应用程序时,无法加载Crystal report

C# 在ASP.net Mvc应用程序的IIS中部署应用程序时,无法加载Crystal report,c#,asp.net,.net,asp.net-mvc,crystal-reports,C#,Asp.net,.net,Asp.net Mvc,Crystal Reports,我在发布应用程序后出错。甚至在我移交的同一台电脑上。在开发过程中,一切都很顺利 The system cannot find the path specified. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and wh

我在发布应用程序后出错。甚至在我移交的同一台电脑上。在开发过程中,一切都很顺利

The system cannot find the path specified.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Runtime.InteropServices.COMException: The system cannot find the path specified.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[COMException (0x80004005): The system cannot find the path specified.
]
   CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocumentClass.Open(Object& DocumentPath, Int32 Options) +0
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.Open(Object& DocumentPath, Int32 Options) +126
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +315

[CrystalReportsException: Load report failed.]
   CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper.EnsureDocumentIsOpened() +503
   CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename, OpenReportMethod openMethod, Int16 parentJob) +1495
   CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String filename) +99
   ProductionTracker.Web.Reports.CrystalReportGenerator.GenerateReportInPDF(DataTable tb, String reportName) in C:\Users\barry\source\repos\ProductionTracker.Web\ProductionTracker.Web\Reports\Controller\CrystalReportGenerator.cs:37
   System.Web.Mvc.<>c__DisplayClass1.<WrapVoidAction>b__0(ControllerBase controller, Object[] parameters) +18
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +229
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +77
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +72
   System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +387
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +38
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +188
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +52
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +43
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +73
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +602
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +195
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +128
C:\Users\barry\source\repos\ProductionTracker.Web\Reports.CrystalReportGenerator.GenerateReportInPDF(DataTable tb,String reportName)中的这一行
ProductionTracker.Web\ProductionTracker.Web\Reports\Controller\CrystalReportGenerator.cs:37

看起来不对,因为它来自我的开发回购协议。但我不知道该怎么办。

我终于解决了这个问题。我出错的原因是它在发布后将其保存到bin文件夹。所以我需要相应地改变路径。我将
/bin/
添加到
var reportPath=HttpContext.Current.Server.MapPath(“~/”+“Reports/”+reportName
这样地
var reportPath=HttpContext.Current.Server.MapPath(“~/bin/”)+“Reports/”+reportName;

然后成功了

1)您得到的错误和您在其他SO帖子中引用的错误不是同一个错误。2) 您是否100%确定
reportPath
变量返回了您认为应该返回的路径,以及报告文件的正确路径?您是否100%确定报告文件是作为项目的一部分部署的(如中所示,您可以在web服务器上看到该文件,并且其路径正确)?谢谢,这就是问题所在!我意识到,一旦保存到输出,它就会将其保存到bin文件夹中。所以我添加了
/bin
,然后它工作了,它为你工作了!顺便说一句,你可以把你自己的答案标记为正确(我想在一段时间后)。这样,问题就标记为结束:)谢谢,我把它标记为正确的
public static void GenerateReportInPDF(DataTable tb, string reportName)
        {
            using (var reportDocument = new ReportDocument())
            {
                var reportPath = HttpContext.Current.Server.MapPath("~/") + "Reports//" +  reportName;
                reportDocument.Load(reportPath);
                reportDocument.Database.Tables[0].SetDataSource(tb);             

       reportDocument.ExportToHttpResponse(ExportFormatType.PortableDocFormat, HttpContext.Current.Response, false, reportName);
                reportDocument.Close();
            }
        }