Странная ошибка - CS0012: Тип x определен в сборке, на которую не указаны ссылки
Тип 'x' определен в сборке, на которую не ссылаются. Вы должны добавить ссылку на сборку 'abc123'.
У меня есть веб-приложение .NET 2.0, которое ссылается на мою сборку 'abc123'. Сборка существует в GAC, и я проверил, что она является правильной (той же) версией. В остальной части приложения нет проблем, кроме одной .aspx-страницы. На рассматриваемой странице есть ретранслятор, который отображает пользовательский элемент управления как одно из своих "полей". После привязки списка типа y к ретранслятору я передаю пользователю управление типом x (свойство y), как показано здесь:
<uc1:usercontrol id="ucusercontrol " runat="server" myPublicUserControlProperty='<%#Eval("CollectionOfX") %>'/>
В наборе свойств пользовательского элемента я привязываю список типа x к gridview в пользовательском элементе управления.
Странно отметить, что этот отчет отлично работает на моем компьютере разработки, но не на каких-либо серверах после развертывания. Мой компьютер - Windows XP, IIS6, VS2005. Серверы - это Windows Server 2003, IIS6.
Надеюсь, я объяснил это достаточно хорошо. Заранее благодарим за любую информацию, которую вы можете предоставить.
Ответы
Ответ 1
Я Майк коллега, и мы разработали решение.
Тип X определяется в его сборке, то есть только в GAC. Несмотря на то, что в его веб-приложении ASP.NET была ссылка, она не загружалась из GAC только для этого UserControl. Остальная часть приложения работала должным образом. Мы подтвердили неудачную загрузку, разместив копию сборки в каталоге bin, и все сработало. Мы удалили сборку, и проблема вернулась.
Наше решение состояло в том, чтобы вручную добавить запись в web.config в секцию сборки, чтобы указать ASP.NET на GAC.
Похоже, что всякий раз, когда вы ссылаетесь на тип страницы (а не на код), вам нужна информация о сборке, определенная в файле web.config или в директиве страницы.
<assemblies>
<add assembly="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=[MyPublicKeyToken]"/>
</assemblies>
Ответ 2
При устранении этих проблем проблемы Fusion Log Viewer всегда были большой помощью.
Ответ 3
Там также есть ошибка, которая может проявляться с похожими симптомами, описывается здесь.
Обходной путь заключается в том, чтобы удалить все в каталоге C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\и, по-видимому, проявляется в режиме отладки.
Ответ 4
Я обнаружил, что если type x
на самом деле является классом в вашем App_Code
, загрязнение и повторное сохранение часто вынуждают веб-приложение перекомпилировать и решает проблему.
Ответ 5
У меня была такая же ошибка, но у меня был конструктор public в моем классе, который использовался как параметр, объект из другого проекта.
Я решил проблему, сделав этот конструктор внутренним.
Ответ 6
Чаще всего это происходит из-за кэшированных сборок. Один из способов решить эту проблему - сделать "сильную ссылку" в файле proj или config. Отправьте этот блог post