Включая библиотеки классов внутри страницы, C # ASP.Net - PullRequest
0 голосов
/ 18 февраля 2009

Работа в нашей ограниченной системе означает, что я не могу поместить библиотеку классов в app_bin / bin / App_Code, в основном, в любую обычную папку, поэтому в настоящее время я подключаюсь к своей библиотеке классов следующим образом ...

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="~/cs/codebehind.cs" Inherits="codebehind"  %>
<%@ Assembly Src="~/cs/mycodelibrary.cs" %>

Проблема, которую я пытаюсь решить, состоит в том, как бы я сослался на библиотеку классов как файл в коде, чтобы мне не нужно было размещать что-то еще на странице, и VS перестает рассказывать мне вещи в сборке. не существует.

т.е.

using "~/cs/regionalPages.cs"

Быстрое добавление, добавление mycodelibrary.cs, как указано выше, работает. Я просто пытаюсь найти лучший способ.

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

Ответы [ 4 ]

2 голосов
/ 18 февраля 2009

Итак. Вы скучаете по реальным серверам.

Почему бы вам не использовать папку App_Code и позволить ASP.NET обрабатывать пути компиляции и ссылки для вас? Вот для чего это.

Редактировать : Хм. Вы говорите, что у вас нет доступа к App_Code, но у вас есть папка cs, куда вы можете вместо этого сбросить файлы кода? Это очень странная договоренность. Что бы об этом подумал тот, кто ограничил ваш доступ?

Еще одна вещь, которую я не понимаю, это то, как ваш mycodelibrary.cs будет компилироваться вообще. ASP.NET обрабатывает компиляцию внутри папки App_Code, но не где-либо еще (или я ошибаюсь?).

Другое редактирование : ОК, я получил его и попробовал. Директива @Assembly на странице .aspx обеспечивает компиляцию файла кода и делает ссылку на него доступной для страницы. Тогда ссылка также доступна в коде (даже с intellisense), поскольку это тот же (частичный) класс.

Теперь, у вас есть вопрос, как вы можете сделать то же самое без директивы @Assembly в файле .aspx (а скорее чего-то в коде позади)? Я могу сказать, что никакая форма using не поможет, по крайней мере. Честно говоря, я не вижу никакого способа сделать это, извините.

Cerebrus упоминает о настройке среды выполнения с использованием базы кода или зондирования в Web.config, но это работает только с скомпилированными сборками.

1 голос
/ 09 ноября 2009

Вот, пожалуйста:

  1. Сначала создайте новый пользовательский элемент управления: UC_TestingPOC.ascx,
  2. Создать новую библиотеку классов: UserControlsCodeBehind,
  3. Под Class Libray добавьте код класса для пользовательского элемента управления, созданного ранее: UC_TestingPOC.ascx.cs

В верхней части вашего пользовательского элемента управления добавьте следующие строки:

<%@ Assembly Name ="UserControlsCodeBehind, Version=1.0.0.0, Culture=neutral, PublicKeyToken=00000000000000" %>
<%@ Control Language="C#" AutoEventWireup="true" Inherits="UserControlsCodeBehind.UC_TestingPOC" %>
1 голос
/ 18 февраля 2009

DLL можно загрузить из того, что вы можете назвать «нормальной» папкой. Однако вам нужно указать ASP.NET загружать сборки из указанной папки, например, используя элементы codebase или probing в файле конфигурации.

Взгляните на эту статью MSDN , в которой объясняется процедура и синтаксис.

1 голос
/ 18 февраля 2009

Прежде всего, файл .cs не является сборкой. Прежде чем рассматривать его как сборку, он должен быть сначала скомпилирован в DLL.

Чтобы сослаться на код в сборке, импортированной на уровне страницы, я полагаю, что вам придется поместить свой код на стороне сервера в линию с разметкой (в отличие от отдельного файла aspx.cs).

С наилучшими пожеланиями ...

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