C#: Пользовательский каталог блока

Дайте этому выстрел:

$firstName = new Zend_Form_Element_Text('firstName');
$firstName->setLabel('First Name')
          ->setRequired(true)
          ->addValidator('NotEmpty', true)
          ->addErrorMessage('Value is empty, but a non-empty value is required.');

ключ - то, что "верный" на блоке проверки допустимости при установке этого на истинный это уничтожит другие проверки после него. Если Вы добавите больше чем один метод проверки, но установите это на ложь, он проверит все методы.

14
задан Svish 20 October 2009 в 12:19
поделиться

4 ответа

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

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="lib;thirdParty" />
  </assemblyBinding>
</runtime>

Вы можете увидеть более подробную информацию здесь .

31
ответ дан 1 December 2019 в 06:39
поделиться

Чтобы автоматически копировать сборки в папку, в которой вы хотите, чтобы они находились, вы можете установить Copy Local в значение true для всех ссылок и сделать сообщение шаг сборки, чтобы переместить их в подкаталоги.

В качестве альтернативы, вы можете установить для параметра Copy Local значение false и добавить файлы DLL, на которые есть ссылки, как файлы в проекте в соответствующие подкаталоги, а также задать для Build Action значение Copy to output directory. (Это сохранит подкаталоги)

Самый гибкий способ заставить среду выполнения найти их - обработать событие AppDomain.AssemblyResolve и вручную загрузить сборку с помощью Assembly.LoadFile . Вашему коду потребуется какой-то способ узнать, какие сборки в каких каталогах.

2
ответ дан 1 December 2019 в 06:39
поделиться

В своем комментарии вы упоминаете добавление путей и местоположений во время выполнения. Да, можно, но необходимо использовать Assembly.Load () и, возможно, отражение.

0
ответ дан 1 December 2019 в 06:39
поделиться

Если вы хотите вручную управлять тем, откуда брать сборки, у вас есть две возможности:

  1. Обработать событие AppDomain.AssemblyResolve (как это описано в SLaks). Вот фрагмент кода:

     static void Main (string [] args)
    {
     ...
    AppDomain.CurrentDomain.AssemblyResolve + = новый ResolveEventHandler (CurrentDomain_AssemblyResolve);
     ...
    }
    static System.Reflection.Assembly CurrentDomain_AssemblyResolve (отправитель объекта, аргументы ResolveEventArgs)
    {
    строковые сборкиDir = "ваш_каталог";
    Assembly asm = Assembly.LoadFrom (Path.Combine (assemblyDir, args.Name + ".dll"));
    вернуть asm;
    }
    
  2. Создайте домен со своими настройками (задав свойства ApplicationBase или PrivateBinPath объекта AppDomainSetup).

Итак, если вы хотите продолжить работу в текущем домене, вы должны использовать метод 1.

11
ответ дан 1 December 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: