AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.11.2013, 10:48   #1  
egater is offline
egater
Участник
Аватар для egater
 
19 / 10 (1) +
Регистрация: 06.10.2011
При компиляции не видит подключённых dll через references
При компиляции не видит подключённых dll через references. Работаю в ax2009,dll написана на c#. Подключаю dll как в примере Dynamics и .net (Dot net rocks)
Старый 02.11.2013, 13:08   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
а компиляция происходит на том же хосте, где лежит добавленная в references DLL? и где именно она лежит, в GAC или в каталоге bin клиента?
Старый 02.11.2013, 22:39   #3  
egater is offline
egater
Участник
Аватар для egater
 
19 / 10 (1) +
Регистрация: 06.10.2011
Данная dll лежит в bin клиента, также пробовал добавить через GAC.В обоих случаях references, в коде компилятор подсвечивает как не существующий объект.

Последний раз редактировалось egater; 02.11.2013 в 23:01.
Старый 04.11.2013, 18:46   #4  
egater is offline
egater
Участник
Аватар для egater
 
19 / 10 (1) +
Регистрация: 06.10.2011
1)Добавляю библиотек в gas слой
gacutil /i mydll.dll

2)На всякий случай регистрирую типы r
regasm mydll.dll
3)Создаю в аксапте в узле references создаем ссылки на protobuf-net.dll и DiadocApi.dll
В итоге в текстовом редакторе при попытке обратиться к dll он подсвечивает ее название как не существующий объект.
Может я пропустил какое то действие?
Старый 04.11.2013, 19:31   #5  
pedrozzz is offline
pedrozzz
Молодой, подающий надежды
Аватар для pedrozzz
MCBMSS
Лучший по профессии 2015
 
164 / 218 (8) ++++++
Регистрация: 18.02.2010
Адрес: Краснодар
Цитата:
Сообщение от egater Посмотреть сообщение
3)Создаю в аксапте в узле references создаем ссылки на protobuf-net.dll и DiadocApi.dll
В итоге в текстовом редакторе при попытке обратиться к dll он подсвечивает ее название как не существующий объект.
Может я пропустил какое то действие?
В SDK Диадока идет 3 библиотеки (DiadocApi.dll, protobuf-net.dll и Newtonsoft.Json.dll), чтобы использовать Диадок API из Аксапты, надо, чтобы все три библиотеки были или в каталоге bin или в GAC. В references потом достаточно добавить только DiadocApi.

При этом обращение к библиотеке идет через пространство имен Diadoc, т.е.
X++:
Diadoc.Api.DiadocApi  api  = new Diadoc.Api.DiadocApi(...)
__________________
Кононов Пётр

Последний раз редактировалось pedrozzz; 04.11.2013 в 19:36.
Старый 06.11.2013, 08:21   #6  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Библиотека должна быть strong named , для использования в аксапте. Но этого мало, как то мучился с самописной dll, заработало только после того как добавил ее в узел Polisy Assemblies в .Net Framework 2.0 Configuration (утилита такая). Добавлять можно через интерфейс, можно через командную строку

Последний раз редактировалось jonny; 06.11.2013 в 08:28.
Старый 04.04.2014, 16:25   #7  
Sergikrus is offline
Sergikrus
Участник
 
82 / 15 (1) ++
Регистрация: 26.09.2008
Адрес: Tyumen
Достаточно ли зарегистрировать библиотеку в GAC на AOS или всегда нужно копировать библиотеку в bin клиентского приложения?
Старый 04.04.2014, 16:48   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Для успешной компиляции X++ надо, чтобы клиент "видел" сборку, на которую ссылается код. Если компиляция будет запускаться на хосте AOS'а, то достаточно зарегистрировать сборку в GAC, если же она будет запускаться на другом хосте, то на нем также должна быть эта сборка - в GAC либо в bin клиента, которым будет компилироваться код.
Старый 04.04.2014, 21:30   #9  
Sergikrus is offline
Sergikrus
Участник
 
82 / 15 (1) ++
Регистрация: 26.09.2008
Адрес: Tyumen
Angry
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Для успешной компиляции X++ надо, чтобы клиент "видел" сборку, на которую ссылается код. Если компиляция будет запускаться на хосте AOS'а, то достаточно зарегистрировать сборку в GAC, если же она будет запускаться на другом хосте, то на нем также должна быть эта сборка - в GAC либо в bin клиента, которым будет компилироваться код.
У меня следующая ситуация, есть сборка, которую я зарегил в GAC на AOS, компиляция проходит, код исполняется, работает. Устанавливаю клиентское приложение сотруднику, при исполнении кода возникает ошибка Объект "CLRObject" не может быть создан ругается на строчку где объявлена эта сборка в classDeclaration. Если эту сборку положить в bin клиента, то все работает. Как бы должно быть достаточным регистрации в GAC, но нет!
Старый 04.04.2014, 22:04   #10  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
.NET-сборка - это в общем случае кусок исполняемого кода. Очевидно, что кусок исполняемого кода должен располагаться там, где он исполняется (если не рассматривать вариант запуска с сетевой шары). Поэтому если у вас есть серверный код, использующий сборку, то достаточно зарегистрировать ее в GAC на всех хостах AOS'ов, если же сборку использует клиентский код, то она должна быть доступна на всех хостах, где запускается клиент Аксапты.
GAC - это сугубо локальный ресурс, к которому имеют доступ только локально выполняющиеся приложения. Чтобы сборка, зарегистрированная в GAC, была доступна на компе "сотрудника", она и зарегистрирована должна быть на компе "сотрудника", а не только на хосте AOS'а, где вы запускаете компиляцию кода.
За это сообщение автора поблагодарили: Sergikrus (1).
Старый 10.04.2014, 05:48   #11  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
в любом случае, когда я компилирую на сервере код, и он не компилируется из-за какого-то компонента из DLL, и я уверен, что все нужные DLL либо в bin сервера, либо в bin клиента, либо в assembly папке на сервере, а ещё лучше везде где только можно, то я поступаю так:

- остановить АОС
- убить AOI (если 2009 аксапта или более ранняя. если 2012, стереть всю папку с XppIL)
- запустить АОС
- полная компиляция (и CIL, если 2012)

если всё равно не видит, перезапустить сервер.

никогда не было такого, чтобы DLL лежали на своих местах, а перезагрузка сервера не исправила проблему.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 01.03.2023, 02:49   #12  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
У меня аналогичная ситуация с AX2012CU13. Есть:
а) своя библиотека "MyDll" написанная для .Net 4.5.2, которая использует библиотеки:
б) Newtonsoft 6.0.8 под .Net 4.5
в) и еще одну, SDK под .Net 4.5.2, назовем ее SDKDll

Все три библиотеки:
1) скопированы в папку C:\Program Files (x86)\Microsoft Dynamics AX\60\Client\Bin
2) скопированы в папку C:\Program Files\Microsoft Dynamics AX\60\Server\MyDEV\bin
3) добавлены в GAC (практика показывает что этот шаг необязателен)
4) перегрузка АОСа с очисткой AUC файлов.
5) добавлены в АОТ как референс. Пробовали добавлять выбирая из списка, выполняя "Browse" и выбирая библиотеку в папке клиента/или в папке сервера
6) создаем новый джоб в АОТ, начинаем писать Newtonsoft, и видим что Аксапта видит библиотеку.
7) создаем новый джоб в АОТ, начинаем писать MyDll, и ничего.
8) при попытке скомпилировать переменную использующую референс на MyDll, получаем ошибку "Variable MyDll has not been declared."

На другом сервере с той же версией Аксапты с теми же шагами, библиотека опознается и код компилируется. На данный момент имеем несколько серверов где работает и еще несколько где не работает.

На сервере где библотека не опознается, пробовали следующее:
- обновить .net до версии 4,7,2
- обновить .net до версии 4,8
- установить VS redistributable package
- установить VS Studio 2013 Update 4
- установить MS Dynamics VS Tools
- перегрузка сервера
- очистка папки XPPIL и последующий full CIL
- полная компиляция через axcompile и из АХ клиента
- полный СИЛ
- синхронизация базы данных
- перенос проекта с библиотекой в Визуал Студию 2013 из более поздней версии и создание библиотеки из VS2013.
- VS2010 не поддерживает .net 4.5.2 и мы просто не сможем использовать имеющийся SDK
- использование подписанной и неподписанной библиотеки (strong name)
- использование фукции hot-swap для библиотек в настройках АХ сервера

Воз и ныне там.

Наблюдения:
1) На одном из старых серверов в папке клиента и сервера не было библиотеки Newtonsoft. Достаточно было ее скопировать в вышеуказанные папки, добавить референс в АОТ и она моментально стала доступной в коде.
2) Также мы нашли версию "MyDll.dll" написанную несколько лет назад. Исходный код затерялся. Так вот эта библиотека становится видимой так же как и Newtonsoft. Сравнение этой старой версии и новой версии в VS Object browser не показало никаких видимых различий. Target .Net framework для обоих библиотек = 4.5.2

Вопросы:
1) ?????
2) что нужно сделать чтобы библиотека стала видимой для компиляции?
3) что не хватает библиотеке (или что лишнее) чтобы она мгновенно опознавалась Аксаптой, как Newtonsoft?
Старый 02.03.2023, 20:22   #13  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
Ни у кого нет идей? Там про regasm, fuglovw или папку vsassemblies? Или тема не видна/игнорируется из-за количества комментов/просмотров и нужно создать новую (что типа против правил форума)?
Старый 02.03.2023, 23:51   #14  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
299 / 866 (29) +++++++
Регистрация: 23.10.2012
Добрый вечер.
Ситуация вполне типичная в рамках различных сред развертывания решения.
То, что проблема возникает на этапе компиляции, говорит о том, что именно клиентское приложение не видит библиотеку. Поэтому наличие библиотеки на стороне сервера здесь не влияет на наличие данной проблемы и на этом внимание акцентировать не стоит.
А на чем стоит акцентировать внимание - единственное ли клиентское приложение используется для компиляции кода на серверах. Вариативность здесь невелика:
1. либо на какой-то конкретной машине клиент не видит целевых библиотек - ищите проблемную машину. Это либо конфигурационный файл клиента, либо действительно не хватает нужных библиотек.
2. либо все клиенты не могут выполнить компиляцию - обратите внимание на тип архитектуры подключенной библиотеки и её зависимостях..

Однако, самым эффективным решением здесь будет использование ПО от sysinternals - process monitor, запустите и смотрите куда Аксапт "лезет" за библиотеками. Так же, логично, проанализировать зависимости у этих трех библиотек, возможно они требуют каких-то дополнительных компонентов.

Последний раз редактировалось Товарищ ♂uatr; 03.03.2023 в 00:31.
Старый 07.03.2023, 00:09   #15  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
Спасибо за идею!
sysinternals - process monitor действительно интересная штука. Подвязавшись под ax32.exe вижу некоторую активность при добавлении референса, но абсолютно ничего относящегося к библиотеке при компиляции.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Axilicious:AX2012 DLL Deployment and how AX binds DLL’s at runtime Blog bot DAX Blogs 0 22.05.2013 20:13
Ax3 and Win2008 для печати Arahnid DAX: Администрирование 13 22.04.2013 17:07
MSDAX 4.0 и планировщик win server 2008 werov2010 DAX: Администрирование 11 16.08.2012 14:18
Загруженая dll на C# не выгружается DmitryK DAX: Программирование 5 09.04.2012 11:15
при вызове функции из своей DLL, вылетает ошибка Delfins DAX: Программирование 9 07.03.2006 19:29
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:12.