Веб-сайты asp.net и пространства имен по умолчанию, а также LINQ Datacontext часть 2 - PullRequest
0 голосов
/ 22 марта 2009

Позвольте мне попытаться задать этот вопрос под другим углом.

Я заметил, что каждый раз, когда страница aspx отображается в браузере с использованием модели «веб-сайта», случайная сборка создается «на лету» во временных файлах ASP.NET. Анализ сборки в Reflector показывает, что класс, созданный для любого данного файла .aspx, находится в пространстве имен «ASP».

Итак, начиная с пустой директории «Temporary ASP.NET Files», я открыл свой ASP.NET «сайт» в VS2008 и запустил страницу по умолчанию. Сразу же я заметил, что внутри этой папки был создан случайный каталог. Проходя по пути, я нашел 2 созданные DLL: App_Code.1lywsqqz.dll и App_Web_iohekame.dll. Я предполагаю, что все страницы ASPX на веб-сайте скомпилированы в dll App_Web, а все в папке App_Code скомпилировано в App_Code.dll.

Так что, если мои файлы App_Code C # / VB.net находятся в пространстве имен «ASP», а мои файлы App_Web созданы в пространстве имен «ASP», почему я все еще получаю сообщение об ошибке «Не удалось загрузить тип» ASP.NothwindDataContext '?

Кто-то сказал: «Вам не нужны пространства имен в папке App_Code», но я пробовал без него и все равно получаю «Не удалось загрузить тип 'NorthwindDataContext'".

Так что же происходит между папкой App_Code, остальной частью сайта и пространствами имен?

EDIT: Вот мой LinqDataSource в моем файле .aspx:

<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="NothwindDataContext" EnableUpdate="True" 
    TableName="Categories">
</asp:LinqDataSource>

Ни "NorthwindDataContext", ни "ASP.NorthwindDataContext" не работают.

1 Ответ

4 голосов
/ 22 марта 2009

Типы в App_Code исходных файлах C #, как и любой файл C #, не будут помещаться в определенное пространство имен, если оно не объявлено специально namespace Name {...} вокруг него. Таким образом, класс MyClass, объявленный в App_Code, будет иметь полное имя типа MyClass. Только это.

Вы можете ссылаться на него в Web.config как: "MyClass, App_Code".

Примечание: Когда вы используете DBML в App_Code, пространство имен сгенерированных классов определяется в этом файле (посмотрите на окно свойств, когда файл DBML открыт). Если вы указываете пространство имен в этом файле, естественно, ваши классы будут определены в этом пространстве имен. Обратите внимание, что это не противоречит тому, что я сказал выше. Дело в том, что генератор контекста данных LINQ обрабатывает файл и определяет классы в определенном пространстве имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...