2009-08-19 3 views
0

Существует ли максимальное количество раз, когда DLL может быть зарегистрирована и незарегистрирована в определенный период времени?Максимальное количество DLL может быть зарегистрировано/незарегистрировано?

Вот что я имею в виду и почему: у меня есть Continuous пакет интеграции, который строит свои VB6 приложения и для того, чтобы построить каждый из 80 компонентов раствора, I:

  1. извлечения зависимостей каждого проекта в включить
  2. зарегистрировать DLL (в NAnt используя < comregister UNREGISTER = "ложь" ... ...>)
  3. построить проект
  4. публиковать выходной файл .dll или .exe где-то в безопасности
  5. отменит регистрацию DLL, (в NAnt, используя < comregister UNREGISTER = "истинный" ... ...>)

Теперь это все работает 100% времени, IF Я строю каждый из 80 проектов вручную; Однако, если я получаю мой NAnt скрипт, чтобы собрать все 80 проектов, в свою очередь (в правильном порядке), то сборка терпит неудачу, давая мне эту ошибку в выходе CruiseControls' ...

[comregister] Unregistering 1 files 
[comregister] c:\location\myBuild.include(301,4): Error while unregistering 'c:\\[project-location]\lib\myDependentDLLFile.dll' Unable to find an entry point named '**DllUnregisterServer**' in DLL 'c:\\[project-location]\lib\myDependentDLLFile.dll'. 

(я не знаю, где «DllUnregisterServer» приходит из-за этого!)

Такая же ошибка появляется для каждого последующего проекта, который я построил, после точки отказа, которая находится вокруг области с 50 проектами. Я имею в виду, что первые 50 проектов строят отлично, тогда остальные не работают в очереди.

Я смягчил это, используя атрибут failonerror = "false" внутри вызова comregister внутри NAnt, но это затем вызывает у меня сомнения в отношении того, хорошо это или нет ...!

В идеале, я хотел бы удалить атрибут failonerror и сообщить о реальных ошибках в средствах ведения журнала CruiseControl. Любые мысли или предложения?

+0

Интересно, является ли отказ найти DllUnregisterServer просто догадкой, а фактическая ошибка - это что-то еще ...? Можете ли вы заставить Nant показать ошибку Win32? Возможно, вы можете изменить задачу comregister, чтобы получить больше информации ... DllUnregisterServer - это функция, которую должны экспортировать все COM-серверы DLL, и какой регистрационный код просто слепо звонит, чтобы отменить регистрацию объектов сервера. –

ответ

1

Нет максимума. Используйте Dumpbin.exe или Depends.exe, чтобы заглянуть внутрь этой DLL и проверить, действительно ли определена точка входа DllUnRegisterServer.

+0

DLL, которые незарегистрированы и не работают, являются теми, которые я буду создавать ранее в процессе. Как вы думаете, может быть проблема в цепочке? –

+0

DllUnregisterServer - это точка входа, используемая для отмены регистрации COM-сервера. Если это COM-серверная DLL, вам нужно убедиться, что она имеет эту точку входа. Если это не так, не пытайтесь зарегистрировать его или отменить его. На самом деле, я не понимаю, почему вы все равно должны отменить его во время сборки. –

+0

Ну, я пытался отменить регистрацию, так как в противном случае у меня была бы одна и та же DLL, зарегистрированная миллион раз в разных местах на моем ПК/сервере. Причина в том, что я использую Ivy для разрешения зависимостей из своего «хранилища» в папку lib в папке, в которой живет проект (который создается в этом экземпляре).Поскольку это VB6 dll, я должен зарегистрировать его перед использованием, а затем я надеялся очистить после себя и отменить регистрацию ненужных файлов зависимостей. Вот и все. –

0

Я не думаю, что teher - это любое ограничение на регистрацию/отмену регистрации DLL.

+0

Ну, вот что я думал изначально, но это, похоже, показывает мне иначе ...: o ( –

Смежные вопросы