Странная ошибка - CS0012: тип x определен в сборке, на которую нет ссылок - PullRequest
29 голосов
/ 12 ноября 2008

Тип 'x' определен в сборке, на которую нет ссылок. Вы должны добавить ссылку на сборку 'abc123'.

У меня есть веб-приложение .NET 2.0, которое ссылается на мою сборку 'abc123'. Сборка существует в GAC, и я убедился, что это правильная (та же) версия. У остальной части приложения нет проблем, за исключением одной страницы .aspx. У рассматриваемой страницы есть повторитель, который отображает пользовательский элемент управления в качестве одного из его «полей». При связывании списка типа y с ретранслятором я передаю пользовательскому элементу управления список типа x (свойство y), как показано здесь:

<uc1:usercontrol id="ucusercontrol " runat="server" myPublicUserControlProperty='<%#Eval("CollectionOfX") %>'/>

В наборе свойств пользовательского элемента управления я связываю список типа x с видом сетки в пользовательском элементе управления.

Одна странная вещь, которую стоит отметить, это то, что этот отчет прекрасно работает на моем компьютере для разработки, но не на каких-либо серверах после развертывания. Мой компьютер - Windows XP, IIS6, VS2005. Серверы - Windows Server 2003, IIS6.

Надеюсь, я объяснил это достаточно хорошо. Заранее благодарим за любые идеи, которые вы можете предоставить.

Ответы [ 7 ]

28 голосов
/ 12 ноября 2008

Я сотрудник Майка, и мы разработали решение.

Тип 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>
4 голосов
/ 12 февраля 2009

Существует также ошибка, которая может проявляться похожими симптомами, описанная здесь .

Временное решение: удалить все в каталоге C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files \, и, похоже, оно проявляется только в режиме отладки.

3 голосов
/ 12 ноября 2008

При устранении неполадок с этими типами Fusion Log Viewer всегда очень помог.

1 голос
/ 02 марта 2012

Я обнаружил, что если type x на самом деле является классом в App_Code, то его загрязнение и повторное сохранение часто вынуждает веб-приложение перекомпилироваться и решает проблему.

0 голосов
/ 07 мая 2018

Для меня это была проблема с контролем версий.

В Visual studio откройте «Ссылки» в обозревателе решений и пролистайте его.

Если на чем-то есть желтый предупреждающий треугольник, запомните имя, удалите его и добавьте обратно (или ReSharper сделает это за вас).

Несколько раз случалось со мной после создания проекта, когда сотрудник добавил новый пакет и ссылки.

0 голосов
/ 07 марта 2011

Чаще всего это происходит из-за кэшированных сборок. Одним из способов решения этой проблемы является создание «сильной ссылки» в файле proj или config. Ссылайтесь на этот блог пост

0 голосов
/ 16 февраля 2011

У меня была точно такая же ошибка, но в моем классе был открытый конструктор, который использовал в качестве параметра объект из другого проекта.

Я решил проблему, сделав этот конструктор внутренним.

...