我继承了一个旧的asp.net webform WebSite 应用程序,我最近的一个项目是将所有代码从app_code文件夹移动到一个单独的库中。除了一页之外,这已经很好了。
有问题的页面没有代码,只有使用嵌入式VB.NET代码来完成一些工作。 代码需要从我创建的新库中构造一个类型,而不是在dll中查找它在App_Code dll中查找的类型,我得到以下异常:
无法从程序集“App_Code,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”加载类型“CybersourceSecurity”。
所以我添加了Import NameSpace和Assembly引用:
<%@ Assembly Name="EA.Legacy" %>
<%@ Import Namespace="EA.Legacy" %>
我仍然得到错误。 代码如下:
<%@ Page Language="VB" AutoEventWireup="false" EnableViewState="false" EnableViewStateMac="false" %>
<%@ Assembly Name="EA.Legacy" %>
<%@ Import Namespace="EA.Legacy" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head runat="server">
<title>Events and Adventures</title>
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
</head>
<body>
<form id="form1" runat="server">
<div>
<%
Dim ky As String
Dim fm As Collections.Specialized.NameValueCollection
Dim sb As New StringBuilder
Dim cybsSecurity As New EA.Legacy.CybersourceSecurity
Dim ValidSignature As Boolean = False
Try
<Do a bunch of stuff that never happens because we blow up first.>
Catch ext As Threading.ThreadAbortException
'ignore
Catch ex As Exception
eventsvb.PageError(Me, ex, "CybersourceReceipt")
Finally
sb = Nothing
cybsSecurity = Nothing
End Try
%>
</div>
</form>
</body>
</html>
Full Stack Trace吼叫:
[TypeLoadException:无法从程序集'App_Code,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'加载类型'CybersourceSecurity'。 ASP.accounting_cybs_receipt_form_aspx .__ Renderform1(HtmlTextWriter __w,Control parameterContainer)in System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children)+131 System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)+315 System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)+48 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children)+246 System.Web.UI.Page.Render(HtmlTextWriter writer)+40 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+5290
[编辑] 注意:此代码在VS中运行正常我可以毫无例外地执行它,它只发生在Web服务器上。
答案 0 :(得分:0)
好吧它正在为你的VS工作,因为它在本地使用了引用,但是在你的服务器上没有这样的引用,为了解决这个问题,你只需按照下面的说明操作:
第1步在项目解决方案下的Visual Studio中,单击引用文件夹
第2步现在,右键单击要将其嵌入项目的引用,然后单击属性,然后您将看到复制本地选项设置为false,将其设置为 true
现在保存并重建您的解决方案,然后将其发布到服务器上即可。
答案 1 :(得分:0)
我想通了,关键是它在VS中运行而不是在服务器上运行,曾几何时将站点完全编译成dll,包括aspx页面。我能够在登台站点上重新编写问题,然后清理bin文件夹,页面开始工作。所以我查看了生产中的bin文件夹,发现了一个与aspx页面同名的dll,我删除了它,并且一切都很好。我带走了:每当我们将新建筑推向生产时,我们需要清除任何不再属于项目的东西。