仅部署DLL

时间:2015-05-11 08:24:57

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

不知道该怎么称呼它。但这就是我所经历的。

我使用VS 2013的发布选项部署了一个Asp.net Web应用程序。此应用程序使用分层架构并具有BAL,DAL等。一两天之后发生了一些小改动在BAL即将部署。由于更改仅在BAL中,因此我只构建该BAL项目并仅将BAL的DLL(没有发布整个Web应用程序)部署到我的Web应用程序的bin中,有些事情开始打破方法未找到异常但是方法就在那里。我收到的例外情况如下。

  

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

     

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

以下是来自IL DASM的剪辑,其中显示该方法确实存在于该dll中。

enter image description here

对我来说,可疑的是褪色的粉红色盒子,这些实心的粉红色盒子方法和上面图片中褪色的方法之间的区别是什么?

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

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

  • 我只部署了一个BAL dll。

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

1 个答案:

答案 0 :(得分:0)

即使方法"有#34;,您的WEB站点也使用旧的BL程序集进行编译,因此它可能会引用"不同的代码" - 这可能是因为在发布模式下的一些编译优化(方法内联,尾部调用优化等)。 尝试使用您的" new"在本地编译您的WEB应用程序。 BL dll参考。如果成功 - 只需重新部署您的WEB dll。不一定是发布,你可以在本地编译它,并像在BL

中那样只替换DLL