内联代码无法找到程序集引用

时间:2014-06-11 22:54:59

标签: asp.net .net webforms web-site-project

我继承了一个旧的asp.net webform WebSite 应用程序,我最近的一个项目是将所有代码从app_code文件夹移动到一个单独的库中。除了一页之外,这已经很好了。

有问题的页面没有代码,只有使用嵌入式VB.NET代码来完成一些工作。 代码需要从我创建的新库中构造一个类型,而不是在dll中查找它在App_Code dll中查找的类型,我得到以下异常:

  

无法从程序集“App_Code,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null”加载类型“Cyber​​sourceSecurity”。

所以我添加了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'加载类型'Cyber​​sourceSecurity'。      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服务器上。

2 个答案:

答案 0 :(得分:0)

好吧它正在为你的VS工作,因为它在本地使用了引用,但是在你的服务器上没有这样的引用,为了解决这个问题,你只需按照下面的说明操作:

第1步在项目解决方案下的Visual Studio中,单击引用文件夹 enter image description here

第2步现在,右键单击要将其嵌入项目的引用,然后单击属性,然后您将看到复制本地选项设置为false,将其设置为 true

enter image description here

现在保存并重建您的解决方案,然后将其发布到服务器上即可。

答案 1 :(得分:0)

我想通了,关键是它在VS中运行而不是在服务器上运行,曾几何时将站点完全编译成dll,包括aspx页面。我能够在登台站点上重新编写问题,然后清理bin文件夹,页面开始工作。所以我查看了生产中的bin文件夹,发现了一个与aspx页面同名的dll,我删除了它,并且一切都很好。我带走了:每当我们将新建筑推向生产时,我们需要清除任何不再属于项目的东西。