09.04.2024, 13:51 | #1 |
Участник
|
Из какого слоя компилятор берет SysObsoleteAttribute ?
Привет
Обнаружилась интересная особенность. Если компилировать класс SubledgerJournalizer то для метода loadaccountingDistributionTmp выдает предупрждение компилятора "Метод SubledgerJournalizer::loadedAccountingDistributionTmp устарел. This delegate will be replaced with a parameter accepting AccountingDistributionTmp buffer in future version." Идем в делегат loadedAccountingDistributionTmp удаляем там строку X++: [SysObsoleteAttribute('This delegate will be replaced with a parameter accepting AccountingDistributionTmp buffer in future version.', false)] Сбрасываем всевозможные кеши, пересобираем CIL, рестартуем аос, ничего не помогает. Барабашка ? Или компилятор смотрит атрибут SysObsoleteAttribute не только из USR слоя, но просматривает все слои ? Но зачем ? Или я недочистил какие-то кеши ? Dax2012 R3 |
|
09.04.2024, 14:22 | #2 |
Moderator
|
Цитата:
Сообщение от Logger
Идем в делегат loadedAccountingDistributionTmp
удаляем там строку X++: [SysObsoleteAttribute('This delegate will be replaced with a parameter accepting AccountingDistributionTmp buffer in future version.', false)] Сбрасываем всевозможные кеши, пересобираем CIL, рестартуем аос, ничего не помогает. [SysObsoleteAttribute('Тут какая-то фигня', false)] Я просто подозреваю, что с точки зрения компилятора, аттрибут - это отдельная сущность уровня класса. И чтобы ее переопределить, надо ее не просто удалить в тексте более низкого слоя, а заместить (или - возможно - поставить обратный аттрибут, но для SysObsolete такого нет). |
|
|
За это сообщение автора поблагодарили: Logger (3). |
09.04.2024, 14:30 | #3 |
Участник
|
Цитата:
X++: /// <summary> /// An <c>AccountingDistributionTmp</c> record loaded event handler delegate. /// </summary> [SysObsoleteAttribute('Test', false)] delegate void loadedAccountingDistributionTmp() { } ничего не изменилось. Как-то это косячно. |
|
09.04.2024, 14:45 | #4 |
Участник
|
Прикол еще в том, что на sys слое нет никакого атрибута. Он появляется на syp слое. Затирается или изменяется на usr, но аксапте уже пофиг.
|
|
09.04.2024, 21:39 | #5 |
Administrator
|
Не смог воспроизвести.
Что сделал: 1. Изменил сообщение. Тут надо понимать, что "метод устарел" - это вообще сам факт наличия атрибута SysObsoleteAttribute, а внутренний параметр (текст) - это сообщение, которое выдается в окно ошибок компиляции 2. Собрал полный CIL, рестартовал АОС 3. Ошибка (предупреждение) не исчезла. Пошел, просто закомментировал атрибут. Ошибка исчезла. Сборку CIL не делал 4. Попробовал поставить любой другой атрибут (т.е. любой другой наследник класса SysAttribute). Перекомпилировал. Ошибки (предупреждения) нет. Сборку CIL (ни полную, ни инкрементную) также не делал
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Logger (10). |
10.04.2024, 12:01 | #6 |
Участник
|
Спасибо за подсказку
У меня теперь тоже пропало когда поставил так X++: /// <summary> /// An <c>AccountingDistributionTmp</c> record loaded event handler delegate. /// </summary> [SysOperationLabelAttribute('Test')] delegate void loadedAccountingDistributionTmp() { } X++: /// <summary> /// An <c>AccountingDistributionTmp</c> record loaded event handler delegate. /// </summary> delegate void loadedAccountingDistributionTmp() { } И это странно. Ну главное что цель достигнута. Всем спасибо. |
|
10.04.2024, 12:09 | #7 |
Участник
|
|
|
Теги |
dax2012, sysobsoleteattribute, компилятор, предупреждение компилятора |
|
|