Пространство имен для ссылочной библиотеки DLL доступно в контроллерах / моделях, а не в представлениях

#c# #razor #visual-studio-2019

#c# #razor #visual-studio-2019

Вопрос:

У меня есть проект MVC, который ссылается на пользовательскую библиотеку DLL в другом проекте. DLL называется «Web» и имеет классы, которые мне нужны в «Моделях».

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

 using Web.Models.Base;
 

И

 using Web.Models.AppToolKit
 

И все объекты в этих классах доступны.

Однако в представлениях, в том же проекте, веб-пространство имен вообще недоступно. Я получаю:

 Severity    Code    Description Project File    Line    Suppression State
Error   CS0246  The type or namespace name 'Web' could not be found (are you missing a using directive or an assembly reference?)   
 

И когда я использую модель, которую я создал в проекте в представлении, которая наследуется от ссылочной библиотеки DLL и компилируется без проблем, я получаю сообщение об ошибке:

 Error   CS0012  The type 'BasicNetPageModel' is defined in an assembly that is not referenced. You must add a reference to assembly 'Web, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
 

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

Я использую VS 2019. Я много раз пытался удалить / повторно добавить ссылку и очистить / перестроить.

Я пробовал добавлять:

 <add namespace="TASWeb.Models.Base"/>
 

в файле web.config.

Есть какие-нибудь идеи?

Комментарии:

1. Отображается ли ошибка в окне списка ошибок и редакторе? Вероятно, платформа, созданная из вашей библиотеки dll, отличается от вашего проекта.

2. Вы пробовали что-то вроде @using Web.Models. База в поле зрения?

3. @Adleri Я. Это проявляется в обоих случаях. Я проверил оба проекта, и они являются .Net 4.6.1 с целевой платформой x64.

4. @DickBos я сделал да, и там написано «имя «Web» не найдено».

5. Вы проверили, не является ли это проблемой профилирования

Ответ №1:

Похоже, проблема заключалась во второй DLL, на которую ссылались из первой DLL.

Для этого проекта было установлено значение x86. Я установил его на ЛЮБОЙ процессор, перекомпилировал, затем перекомпилировал первую DLL, после чего рассматриваемый проект смог распознать пространство имен.