Встроенный код не может найти ссылку на сборку

Я унаследовал старое приложение WebSite asp.net webform, в одном из моих недавних проектов я переместил весь код из папки app_code в отдельную библиотеку. Это отлично сработало, за исключением одной страницы.

На рассматриваемой странице нет кода, а просто используется встроенный код VB.NET для выполнения некоторой работы. Код должен построить тип из новой библиотеки, которую я создал. Вместо того, чтобы искать тип в dll, он смотрит в dll App_Code, и я получаю следующее исключение:

Не удалось загрузить тип CybersourceSecurity из сборки App_Code, Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null.

Итак, я добавил Import NameSpace и ссылку на сборку:

<%@ 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>

Полная трассировка стека ниже:

[TypeLoadException: не удалось загрузить тип CybersourceSecurity из сборки App_Code, Version = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null.] ASP.accounting_cybs_receipt_form_aspx .__ Renderform1 (HtmlTextWriter __w, Control parameterContainer.U) в SystemI Control.RenderChildrenInternal (писатель HtmlTextWriter, дочерние элементы ICollection) +131 System.Web.UI.HtmlControls.HtmlForm.RenderChildren (писатель HtmlTextWriter) +315 System.Web.UI.HtmlControls.HtmlContainerControl.Beader UI.Control.RenderChildrenInternal (средство записи HtmlTextWriter, дочерние элементы ICollection) +246 System.Web.UI.Page.Render (средство записи HtmlTextWriter) +40 System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPointStages, +5290 Boolean includeStagesBeforeAsyncPointStages, +5290 include

[Edit] Примечание. Этот код отлично работает в VS. Я могу пройти его без исключения, это происходит только на веб-сервере.


person Anthony    schedule 11.06.2014    source источник
comment
Если вы создаете новую страницу в той же папке, можете ли вы создать экземпляр CybersourceSecurity из кода этой новой страницы?   -  person John Saunders    schedule 12.06.2014
comment
Да, у нас есть множество других страниц, которые используют класс CyberSourceSecurity в исходном коде. Я забыл добавить, что я не получаю эту ошибку в Visual Studio, я могу выполнить код, и он отлично работает, это происходит только на веб-сервере   -  person Anthony    schedule 12.06.2014
comment
Это часть проекта веб-сайта или проекта веб-приложения?   -  person John Saunders    schedule 12.06.2014
comment
Это проект веб-сайта   -  person Anthony    schedule 12.06.2014
comment
Важно сказать об этом - следует избегать проектов веб-сайтов, поскольку они отличаются от любых других проектов в Visual Studio. Одним из результатов этого является то, что те, кто пытается вам помочь, будут предполагать, что вы используете проект веб-приложения, и дадут вам плохие ответы.   -  person John Saunders    schedule 12.06.2014
comment
Да, спасибо. Я добавлю это в описании.   -  person Anthony    schedule 12.06.2014


Ответы (2)


хорошо, он работает на вашем VS, потому что он использует ссылку локально, но на вашем сервере такой ссылки нет, чтобы исправить проблему, просто следуйте инструкциям ниже:

Шаг 1. В Visual Studio под вашим проектным решением щелкните папку Ссылки введите описание изображения здесь

Шаг 2. Теперь щелкните правой кнопкой мыши ссылки, которые вы хотите встроить в свой проект, и нажмите Свойства, после чего вы увидите Копировать локальные для параметра установлено значение false, установите для него значение true

введите описание изображения здесь

Теперь сохраните и перестройте свое решение, затем опубликуйте его на сервере и все.

person Ali    schedule 11.06.2014
comment
К сожалению, это веб-сайт, а не проект веб-приложения, поэтому здесь нет справочной папки, и все библиотеки DLL по умолчанию копируются в каталог bin. Кроме того, эта ссылка используется на других страницах, поэтому я знаю, что на нее ссылаются правильно, но спасибо - person Anthony; 12.06.2014

Я понял это, ключ в том, что он работает в VS, а не на сервере, когда-то давно сайт был полностью скомпилирован в DLL, включая страницы aspx. Мне удалось воспроизвести проблему на промежуточном сайте, затем очистить папку bin, и страница начала работать. Итак, я заглянул в папку bin на производстве и нашел dll с тем же именем, что и страница aspx, я удалил ее, и с миром все в порядке. Мой вывод: каждый раз, когда мы запускаем новую сборку в производство, нам нужно удалить все, что больше не является частью проекта.

person Anthony    schedule 12.06.2014