17.06.2022, 13:47 | #1 |
программист
|
Ошибка Microsoft.Office.Interop.Excel
Добрый день.
Не могу найти ответа на загадочную ошибку. Версия - 2012 Стандартная библиотека - Microsoft.Office.Interop.Excel В какой то момент (есть подозрения, что после переноса кода через модель, либо после того как коллега что то заденет где то - точно не выяснил) компилятор начинает выдавать ошибку в нескольких классах, которые используют Microsoft.Office.Interop.Excel. Раз в пару месяцев такое случается. Внизу пример джоба. Т.е. система перестает видеть некоторые методы классов из библиотеки (на классе Range тоже ограниченно видит) Если закомментировать код на проблемных классах, откомпилировать их, запустить CIL (даже инкрементный помог), то все становится на места. Внизу джоб где уже видны все методы класса уже после CIL. Не пойму как CIL влияет. И как решить ситуацию. Т.е. я получаю ошибку в классах. Не могу собрать CIL. Без CIL ошибка в классах не исправляется. Так же было на рабочей после переноса. Перенос через модель. Падает на глобальной компиляции. Причем ошибка всплывает периодически с интервалом в пару месяцев. Чаще переносы проходят без проблем. Понимаю, что тема довольно специфическая, но может кто сталкивался. |
|
17.06.2022, 15:01 | #3 |
Участник
|
Злой Вы. В России давать ссылку на community.dynamics.com без комментария.
Последний раз редактировалось Raven Melancholic; 17.06.2022 в 15:04. |
|
17.06.2022, 16:50 | #4 |
программист
|
Спасибо за ссылку. Встречал ее, когда гуглил. Немного не мое мне кажется.
В теме речь как откомпилировать код через axBuild если нет Excel на сервере. Я компилировал именно на клиенте, на котором точно есть Excel. Т.е. все действия в теме делал из под клиента без AxBuild. |
|
17.06.2022, 19:16 | #5 |
Administrator
|
Цитата:
A few months ago I wrote a post on how to convert Excel documents to PDF with X++. Well, that piece of code made it into production! image But I just notice it does not necessarily compile with Ax Build. The error: The xlApp declaration does not compile because Excel is not installed on the server and AX build can only be completed on the server. If you compile this same piece of code in the AOT on a server that has Excel installed, it compiles without a problem. My solution(s): Install Excel on the server. I am not sure if this will allow AX Build to compile the code, but at least you can then open the AOT after AX build on the sever and compile like I described here. Since I could not install Excel on the server, I did the following:
__________________
Возможно сделать все. Вопрос времени |
|
18.06.2022, 00:02 | #6 |
Участник
|
Цитата:
Далее, чтобы код X++, ссылающийся на .NET-типы, успешно компилировался в AX2012, нужно, чтобы там, где работает компилятор X++, были доступны соотв. сборки .NET. В данном случае, если код компилируется с помощью AXBuild, то на хосте, где AXBuild запускается, должны быть установлены и доступны сборки с namespace-ом Microsoft.Office.Interop.Excel. Если код компилируется из клиента AX32.exe на вашем рабочем компе, тогда на нем должны быть установлены эти сборки. Если код компилируется из клиента AX32.exe на терминальном сервере - то на терминальнике должны быть эти сборки... Как у классиков: утром деньги - вечером стулья, утром на хосте - сборки .NET, вечером - успешная компиляция кода X++ на этом хосте. Может, код компилится на разных хостах?.. |
|
20.06.2022, 12:41 | #7 |
программист
|
Все действия делаю на терминалке. Там стоит Excel. Да и раньше все ок было. Ничего не делали с Excel.
Кстати, видимо я поторопился, сказав, что CIL исправил ошибку. Сегодня она опять всплыла. Видимо, в пятницу не так посмотрел. В общем, на всех почти классах Microsoft.Office.Interop.Excel не видно часть методов (ощущение, что все они свойства) Для пример три класса/интерфейса (привожу по иерархии) Microsoft.Office.Interop.Excel._Application. Не виден метод get_Interactive (свойство Interactive) Microsoft.Office.Interop.Excel.Application. Не виден метод get_Interactive Microsoft.Office.Interop.Excel.ApplicationClass. Все отлично. Виден get_Interactive Можно было бы заменить классы (для WorkBook и WorkSheet есть аналоги *Class), но не понятно что делать с Microsoft.Office.Interop.Excel.Range - на нем тоже свойства не видны. Попробую Repair Office. Может поможет. ЗЫ Гугл молчит Последний раз редактировалось gudzon; 20.06.2022 в 12:44. |
|
20.06.2022, 13:06 | #8 |
программист
|
В общем барабашка какая то.
Решение обходное нашел вроде (на тестовом примере все ок) - приводить к Object классы. |
|
20.06.2022, 13:19 | #9 |
программист
|
|
|
20.06.2022, 18:11 | #10 |
Участник
|
Может быть на терминале не установлен компонент, а на AOS установлен?
А после танцев с бубном (CIL-компиляции) возможно всё встает на свои места. После модификации класса на клиенте список методов/свойств снова может пропасть. Проверьте, что на терминальной машинке компонент присутствует. Ну это так, моя догадка...
__________________
// no comments |
|
20.06.2022, 18:22 | #11 |
Участник
|
Скорее походит имхо что они сбивают номер версии при переносе, с учетом утверждения что excel есть везде и прочее
|
|
20.06.2022, 18:32 | #12 |
программист
|
После обеда хотел уже переписать классы. А проблема сама пропала. Захожу - компилирую классы, и ошибки пропадают. Никто ничего не делал. Коллеги только правили никак с этим не связанный функционал. Эти классы древние - никто не трогает.
В общем не понятно, что это было. |
|
|
|