【问题标题】:Deploying only DLL仅部署 DLL
【发布时间】:2015-05-11 08:24:57
【问题描述】:

不知道该取什么名字。但这就是我所经历的。

我使用 VS 2013 的 Publish 选项部署了一个 Asp.net Web 应用程序。该应用程序使用分层架构,并具有 BAL、DAL 等。一两天后,发生了微小的变化在要部署的 BAL 中。由于更改仅在 BAL 中,所以我只是构建了该 BAL 项目并将 BAL 的 DLL(没有发布整个 Web 应用程序)部署到我的 Web 应用程序的 bin ,并且有些事情开始因 Method not found 异常而中断,但是方法在那里。我收到的例外情况如下。

消息:调用目标抛出异常。

堆栈跟踪:System.Reflection.TargetInvocationException:异常 已被调用的目标抛出。 ---> System.MissingMethodException:找不到方法: 'System.Collections.Generic.List1 BusinessLayer.Dealer.Dealer_BAL.SelectStoreList(Int32, System.Nullable1,System.Nullable`1)'。在 UserInterfaceLayer.DataViews.Dealer.DealerStore.Select(Int32 Mst_Dealer_Id, Int32 userId, Int32 userType) --- 内部结束 异常堆栈跟踪 --- 在 System.RuntimeMethodHandle.InvokeMethod(对象目标,对象 [] 参数,签名 sig,布尔构造函数)在 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象 obj, Object[] 参数,Object[] 参数)在 System.Reflection.RuntimeMethodInfo.Invoke(对象 obj,BindingFlags invokeAttr、Binder binder、Object[] 参数、CultureInfo 文化) 在 System.Web.UI.WebControls.ObjectDataSourceView.InvokeMethod(ObjectDataSourceMethod 方法,布尔 disposeInstance,对象和实例)在 System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments 论据)在 System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 参数,DataSourceViewSelectCallback 回调)在 System.Web.UI.WebControls.DataBoundControl.PerformSelect() 在 Telerik.Web.UI.GridTableView.PerformSelect() 在 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() 在 Telerik.Web.UI.GridTableView.DataBind() 在 Telerik.Web.UI.RadGrid.DataBind() 在 Telerik.Web.UI.RadGrid.AutoDataBind(GridRebindReason rebindReason) 在 Telerik.Web.UI.RadGrid.Rebind() 在 UserInterfaceLayer.UC.LeaseApplication.UC_PrimaryLeaseInfo.SetControlValue(V2 v2) 在 UserInterfaceLayer.AddLeaseApplication.TempLeaseAppBind(String TempLeaseId) 在 UserInterfaceLayer.AddLeaseApplication.Page_Load(对象发送者, EventArgs e) 在 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者, EventArgs e) 在 System.Web.UI.Control.OnLoad(EventArgs e) 在 System.Web.UI.Control.LoadRecursive() 在 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint)

下面是来自 IL DASM 的片段,显示该 dll 中确实存在该方法。

让我怀疑的是那个褪色的粉色盒子,那些纯粉色盒子的方法和上图中的褪色方法有什么区别?

为了提供更多信息并再次回顾,在第二次部署中:

  • 我还没有发布整个 Web 应用程序。

  • 我只部署了一个 BAL dll。

  • 已部署的 BAL dll 构建在与之前构建整个应用程序不同的计算机上。可能这可能是不确定的原因。

【问题讨论】:

  • 您对 BAL dll 所做的更改是什么?重命名/删除任何方法?你确定这个 BAL dll 是从 bin 文件夹加载的吗?不是来自 GAC 等?
  • 那些纯粉色框方法和上图中褪色的方法有什么区别? stackoverflow.com/questions/8791743/…
  • @Kurubaran 这肯定是从 bin 加载的。没有删除任何方法,即使没有找到的方法也存在,如 ILDASM 的片段所示。
  • @MaheshKava,谢谢。
  • 即使您更改了 dll,您也需要重新启动 IIS。您可以尝试重新启动 iis 并检查是否有效吗?

标签: c# asp.net .net visual-studio-2013 deployment


【解决方案1】:

即使方法“存在”,您的网站也是用旧的 BL 程序集编译的,所以它可能会引用“不同的代码”——这可能是因为发布模式下的一些编译优化(方法内联、尾调用优化或ETC)。 尝试使用引用的“新”BL dll 在本地编译您的 WEB 应用程序。如果成功 - 只需重新部署您的 WEB dll。不一定是发布,你可以在本地编译它,然后只替换 DLL,就像你对 BL 所做的那样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2023-03-15
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多