App_Code и web.config - PullRequest
       30

App_Code и web.config

3 голосов
/ 23 марта 2009

Допустим, у меня есть класс (MyClass.cs) в App_Code (с использованием веб-сайта ASP.NET, а не проекта). Классу не назначено пространство имен.

Как мне сделать этот класс действительным на страницах .aspx веб-сайта? ЧТО мне нужно поместить в файл web.config и ГДЕ мне нужно его поместить?

Добавить <тег сборки или <добавить тип ?? </p>

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

Должен ли я просто добавить тег типа? Где я могу поместить это в файл web.config?

EDIT: Хорошо, я нашел часть своего ответа. Я получаю сообщение об ошибке, потому что «http://localhost/MyFolder" не было задано в качестве« приложения »в IIS. Однако у меня есть куча папок», http://localhost/MyFolder2, http://localhost/MyFolder3, и т. Д.

Новый вопрос: есть ли способ, чтобы MyFolder не был приложением, и все же заставить его работать правильно? Я слышал о теге "CodeSubdirectories", это полезно и где бы я его поместил? Спасибо.

Ответы [ 6 ]

2 голосов
/ 16 июня 2009

Проверьте свойства файла кода в обозревателе решений.

У меня была ситуация, когда для одного из файлов кода .cs было выбрано «Содержимое» для Действия сборки. Все остальные файлы в App_Code компилировались нормально, но не этот.

Изменено действие «Сборка» на «Скомпилировать», и оно начало работать как положено.

2 голосов
/ 23 марта 2009

Это один из тех плохо документированных аспектов динамической компиляции, которые возникли, когда впервые появились сайты asp.net 2.0.

Фактический ответ на ваш конкретный вопрос, однако, потребует, чтобы вы рассказали нам больше о том, что именно вы пытаетесь сделать с классом из App_Code. Большую часть времени вам не нужно беспокоиться о пространстве имен или имени сборки, чтобы использовать эти классы на своих страницах. Вы просто используете имя класса, и компилятор выяснит это и подключит все для вас.

Самое большое исключение, с которым я столкнулся, это использование веб-элементов управления, которые я поместил в app_code. Для них вам нужна директива @Register на странице aspx ... а для этого вам нужно имя сборки и пространство имен.

Файлы в app_code скомпилированы в сборку с именем "__code" (обратите внимание, что здесь есть ДВА подчеркивания, а не одно). Это то, что вы можете использовать, когда вам нужно имя сборки для директив Register или в файле web.config, или нет.

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

2 голосов
/ 23 марта 2009

На веб-сайте в папке App_code не требуется пространства имен. Ничто не должно входить в ваш web.config для ссылки на классы в вашей папке app_code.

1 голос
/ 23 марта 2009

Судя по вашим изменениям, вы пытались переместить папку App_Code в корень сайта?

/App_Code
/MyFolder
/MyFolder2
/MyFolder3

Это может решить вашу проблему.

Вы также можете взглянуть на совет / трюк Скотта Гатри:

Создание вложенных веб-проектов с использованием веб-приложений VS 2005

Хотя для этого используются проекты веб-приложений, а не веб-сайты.

Глядя на элемент конфигурации CodeSubDirectories - вы, вероятно, могли бы использовать это - его нужно было бы определить в корневом web.config, я думаю.

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

1 голос
/ 23 марта 2009

Я не думаю, что вам вообще нужно что-то делать. Так работают веб-сайты "проектов". Все в App_Code компилируется.

0 голосов
/ 23 марта 2009

Убедитесь, что класс общедоступный, может быть?

...