2

我正在尝试在 MVC 应用程序(使用 Visual Studio 下载 NuGet 包)中使用 Rotativa 将视图打印到 PDF,但每当调用该方法时,我都会收到“无法加载文件或程序集”错误。我尝试在网上寻找解决方案,但找不到合适的解决方案。以下是错误的完整堆栈跟踪:

“/”应用程序中的服务器错误。

无法加载文件或程序集“System.Web.Mvc,Version=3.0.0.1,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.IO.FileLoadException:无法加载文件或程序集“System.Web.Mvc,Version=3.0.0.1,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

源错误:

第 48 行:“ViewOrder”,第 49 行:new { id = id }) { FileName = "Order.pdf" }; 第 50 行:} 第 51 行:第 52 行:[HttpGet]

源文件:c:\Users\André\Documents\WAD\Assignment1\7-10-2015\Controllers\OrdersController.cs 行:50

程序集加载跟踪:以下信息有助于确定为什么无法加载程序集“System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35”。

=== 预绑定状态信息 === LOG: DisplayName = System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35 (完全指定) LOG: Appbase = file:///C: /Users/André/Documents/WAD/Assignment1/7-10-2015/ LOG:Initial PrivatePath = C:\Users\André\Documents\WAD\Assignment1\7-10-2015\bin 调用程序集:Rotativa,版本=1.0 .0.0,文化=中性,PublicKeyToken=null。=== LOG:此绑定在默认加载上下文中开始。LOG:使用应用程序配置文件:C:\Users\André\Documents\WAD\Assignment1\7-10-2015\web.config LOG:使用主机配置文件:C:\Users\André\Documents\IISExpress\config\aspnet .config LOG:使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 中的机器配置文件。LOG:后策略参考:System.Web.Mvc,Version=3.0.0.1,Culture=neutral, PublicKeyToken=31bf3856ad364e35 日志:尝试下载新的 URL 文件:///C:/Users/André/AppData/Local/Temp/Temporary ASP.NET Files/root/66e12f45/a5c0a521/System.Web.Mvc。动态链接库。日志:尝试下载新的 URL 文件:///C:/Users/André/AppData/Local/Temp/Temporary ASP.NET Files/root/66e12f45/a5c0a521/System.Web.Mvc/System.Web.Mvc.DLL . 日志:正在尝试下载新的 URL 文件:///C:/Users/André/Documents/WAD/Assignment1/7-10-2015/bin/System.Web.Mvc.DLL。警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集设置(hr = 0x80131040)。探测终止。正在尝试下载新的 URL 文件:///C:/Users/André/AppData/Local/Temp/Temporary ASP.NET Files/root/66e12f45/a5c0a521/System.Web.Mvc/System.Web.Mvc.DLL。日志:正在尝试下载新的 URL 文件:///C:/Users/André/Documents/WAD/Assignment1/7-10-2015/bin/System.Web.Mvc.DLL。警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集设置(hr = 0x80131040)。探测终止。正在尝试下载新的 URL 文件:///C:/Users/André/AppData/Local/Temp/Temporary ASP.NET Files/root/66e12f45/a5c0a521/System.Web.Mvc/System.Web.Mvc.DLL。日志:正在尝试下载新的 URL 文件:///C:/Users/André/Documents/WAD/Assignment1/7-10-2015/bin/System.Web.Mvc.DLL。警告:比较程序集名称导致不匹配:主要版本错误:无法完成程序集设置(hr = 0x80131040)。探测终止。

堆栈跟踪:

[FileLoadException:无法加载文件或程序集“System.Web.Mvc,版本=3.0.0.1,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)]
_7_10_2015.Controllers.OrdersController.PrintOrder(Int32 id) 在 c:\Users\André\Documents\WAD\Assignment1\7-10-2015\Controllers\OrdersController.cs:50 lambda_method(Closure , ControllerBase , Object[] ) +161
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器, Object[] 参数) +59
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2 参数) +602 parameters) +435
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary

System.Web.Mvc.Async.ActionInvocation.InvokeSynchronousActionMethod() +76 System.Web.Mvc.Async.AsyncControllerActionInvoker.b__36(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +36
System.Web.Mvc.Async.WrappedAsyncResult 1.End() + 136 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, 对象标记) +102 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49 System.Web.Mvc.Async.AsyncInvocationWithFilters.b__3c( ) +117 System.Web.Mvc.Async.<>c__DisplayClass45.b__3e() +323 System.Web.Mvc.Async.<>c__DisplayClass30.b__2f(IAsyncResult asyncResult) +44 System.Web.Mvc.Async.WrappedAsyncResult 1。结束()+1362.CallEndDelegate(IAsyncResult asyncResult) +73
System.Web.Mvc.Async.WrappedAsyncResultBase




1.CallEndDelegate(IAsyncResult asyncResult) +47
System.Web.Mvc.Async.WrappedAsyncResultBase

System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50
System.Web.Mvc.Async.<>c__DisplayClass28.b__19 () +72 System.Web.Mvc.Async.<>c__DisplayClass1e.b__1b(IAsyncResult asyncResult) +185
System.Web.Mvc.Async.WrappedAsyncResult 1.End() +133 System.Web.Mvc.Async.AsyncResultWrapper.End (IAsyncResult asyncResult,对象标记)+56 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)+40 System.Web.Mvc.Controller.b__1d(IAsyncResult asyncResult,ExecuteCoreState innerState)+34 System.Web.Mvc。 Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +42
System.Web.Mvc.Async.WrappedAsyncResultBase




1.CallEndDelegate(IAsyncResult asyncResult) +70
System.Web.Mvc.Async.WrappedAsyncResultBase
1.End() +133
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, 对象标签) +56
System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, 对象标签) +37
System.Web .Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44 System.Web.Mvc.Controller.b__15(IAsyncResult asyncResult, Controller controller) +39
System.Web.Mvc.Async.WrappedAsyncVoid 1.End() +133 System.Web. Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +37 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) + 391.CallEndDelegate(IAsyncResult asyncResult) +62
System.Web.Mvc.Async.WrappedAsyncResultBase



System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39
System.Web.Mvc.MvcHandler.b__4(IAsyncResult asyncResult, ProcessRequestState innerState) +39
System.Web.Mvc.Async .WrappedAsyncVoid 1.End() +133 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +37 System .Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult 结果) +381.CallEndDelegate(IAsyncResult asyncResult) +70
System.Web.Mvc.Async.WrappedAsyncResultBase




System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9721605 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

还有我使用 Rotativa 的 ActionAsPDF 的代码示例:

[HttpGet]
public ActionResult ViewOrder(int id)
{
    Order GetOrder = new CartBL().GetOrderById(id);
    return View(GetOrder);
}

[HttpGet]
public ActionResult PrintOrder(int id)
{
    return new ActionAsPdf(
         "ViewOrder",
         new { id = id }) { FileName = "Order.pdf" };
}

我真的很感激有人能帮我解决这个问题。

4

3 回答 3

1

System.Web.Mvc, Version=3.0.0.1 未安装在您的系统上,或者安装在工作进程无法访问的位置。

可能您需要做的是在您的解决方案中找到参考并将其标记为复制本地

在此处输入图像描述

还有其他解决此问题的方法,为了完整起见,我将在此处概述。

你已经登录了融合绑定,这很好,但你没有使用它。它告诉您活页夹去哪里寻找程序集。去看看活页夹寻找装配的每个位置。

它实际上是在这些位置之一吗?然后运行应用程序池的帐户无法访问文件/目录。这是一个权限问题 - 修复它。

它不是在这些位置之一吗?然后它没有安装在该机器上。如果程序集是使用 msi/setup.exe 安装的,请在目标系统上运行它。如果没有,请按照我在此问题顶部的说明,将您的参考复制到本地。或者自己手动复制。

于 2016-01-08T15:58:53.673 回答
1

我猜,Rotativa 可能是使用 ASP.NET MVC 构建的,并引用特定版本(即 System.Web.Mvc 版本 - 3.0.0.1),而您的 MVC 应用程序可能使用不同版本的 System.Web.Mvc . assemblyBinding尝试在项目的 web.config 中添加类似于以下内部部分的程序集绑定。

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
  </dependentAssembly>

在这里,您可能需要将项目中的 System.Web.Mvc 版本替换为 5.0.0.0。

于 2016-01-08T18:06:25.623 回答
1

对我来说,花了大约 1 个半小时后终于卸载了 1.7.3 版并安装了 1.6.4 一切都按预期工作。

使用 NuGet 包管理器控制台命令提示符安装以前的版本:Install-Package Rotativa -Version 1.6.4

于 2018-01-06T07:58:31.700 回答