Конфликты пространства имен в Asp.net MVC
Я давний полупрофессиональный программист asp.net, который недавно совершил переход от среды форм asp.net к MVC. Поэтому я перерабатываю одно из моих веб-приложений, которое существует в формах для MVC, и мне действительно нравится среда MVC, и я рад, что совершаю скачок.
Но... я столкнулся с некоторыми проблемами, такими как этот с пространствами имен.
Итак, давайте представим следующее: 1) я создаю новый проект MVC 4 под названием MyMvcProject 2) я немедленно создаю папку App_Code и добавляю в нее новый файл class1.vb следующим образом:
Namespace MyNamespace
Public Class Class1
Property MyProperty As String
End Class
End Namespace
Хорошо, пока все хорошо. Теперь я хочу получить доступ к этому классу в контроллере или что-то вроде следующего:
Imports MyNamespace
Public Class Default1Controller
Inherits System.Web.Mvc.Controller
Function Index() As ActionResult
Dim obj As New Class1
Return View()
End Function
End Class
В среде форм asp.net мне было бы хорошо пойти. Тем не менее, в моем проекте MVC я не могу импортировать "MyNamespace" и, следовательно, не могу создать Class1. Поэтому я ищу его и нахожу в браузере объектов следующее:
>[OTHER REFERENCES...]
v[VB] MyMvcProject
>{}MyMvcProject
>{}MyMvcProject.My
>{}MyMvcProject.My.Resources
v[VB] MyMvcProject
v{}MyNamespace
> [] Class1
>[OTHER REFERENCES...]
Так что есть мои "MyNamespace" и "Class1". Поэтому я пытаюсь пересмотреть код следующим образом:
Imports MyMvcProject.MyNamespace
Public Class Default1Controller
Inherits System.Web.Mvc.Controller
Function Index() As ActionResult
Dim obj As New Class1
Return View()
End Function
End Class
Но ЭТО не помогает. Я могу ссылаться только на первый экземпляр MyMvcProject и его подссылки. Не второй, где мой "Class1" проживает. Я не уверен, как это исправить.
ОБНОВЛЕНИЕ 1: Я НАШЕЛ РЕШЕНИЕ (НО НЕ ОБЪЯСНЕНИЕ) По какой-то причине ASP.NET MVC не нравится, когда я помещаю вещи в папку App_Code. Тем не менее, если я поместил class1.vb в папку MODELS, я могу импортировать "MyMvcProject.MyNamespace" и продолжить работу в обычном режиме. Обозреватель объекта теперь выглядит так:
>[OTHER REFERENCES...]
v[VB] MyMvcProject
>{}MyMvcProject
>{}MyMvcProject.My
>{}MyMvcProject.My.Resources
v{}MyMvcProject.MyNamespace
> [] Class1
v[VB] MyMvcProject
>[OTHER REFERENCES...]
Обратите внимание, что существует вторая ссылка на MyMvcProject. Но "MyNamespace" и классы, которые я в него помещаю, находятся под экземпляром FIRST, на который я могу ссылаться и импортировать в обычном режиме. Это немного странно, мне кажется. Но если мне нужно все бросить в папку МОДЕЛИ, я это сделаю.
ОБНОВЛЕНИЕ 2 Если бы я знал, что проблема была с помещением материала в папку App_Code, я мог бы найти некоторые ответы: ASP.NET MVC с использованием каталога App_Code
ОБНОВЛЕНИЕ 3
Все проекты MVC по умолчанию являются проектами веб-приложений (WAP) вместо проектов веб-сайтов. Это означает, что в папке App_Code нет необходимости, поскольку WAP всегда компилируются. Это означает, что все файлы *.cs в вашем проекте будут скомпилированы, в отличие от проектов веб-сайтов, где компилируются только файлы *.cs в папке App_Code.
Источник: http://forums.asp.net/t/1315143.aspx?MVC+and+App_Code+folder
ОБНОВЛЕНИЕ 4 И вот как включить папку App_Code в ваш проект MVC:
Вам нужно перейти в раздел "Свойства" файла, а затем изменить действие "Сборка" с "Содержимое" на "Компилировать". Вот и все;)
Источник: http://how-to-code-net.blogspot.mx/2014/04/appcode-classes-not-available-in-aspnet.html