Ошибка переопределения (C2365) в C ++ / CLI, вызванная Babel Obfuscator

Когда я запутываю свою сборку (DLL с настраиваемым элементом управления), написанную на C #. Он работает как в приложениях C #, так и в VB.NET.

Однако, когда я использую DLL из приложения C ++ / CLI, во время сборки появляются такие ошибки:

ошибка C2365: «ComponentOwl :: BetterSplitButton :: BetterSplitButton :: e»: переопределение; предыдущее определение было «собственность»

Буква «e» относится либо к внутреннему члену перечисления, либо к имени частного свойства и т. Д.

Можно ли указать обфускатору Babel не генерировать повторяющиеся имена (я не нашел такого переключателя). Или этого можно избежать с помощью кода?


person Libor    schedule 29.02.2012    source источник
comment
Если ваша сборка C ++ / CLI не была построена с использованием / clr: pure (т.е. она не на 100% управляема, как сборки C # и VB.NET), это может быть связано с тем, что Babel Obfuscator поддерживает только управляемые сборки. Не уверен в этом, поскольку я никогда не использовал Babel, но какое-то время я работал с C ++ / CLI, и большинство инструментов не очень хорошо его поддерживают.   -  person dario_ramos    schedule 29.02.2012
comment
Сборка выполняется в чистом управляемом коде (C #). Проблема появляется в тестовом приложении, которое использует сборку, а приложение - C ++ / CLI.   -  person Libor    schedule 29.02.2012
comment
Ваше приложение C ++ / CLI создано с переключателем / clr: pure? (Свойства- ›Свойства конфигурации-› Общие- ›Значения по умолчанию для проекта-› Поддержка среды CLR)   -  person dario_ramos    schedule 29.02.2012
comment
Да, по умолчанию он построен с использованием / clr: pure. Проблема связана с DLL, которая не является частью сборки - я просто ссылаюсь на нее, и ошибки исходят оттуда.   -  person Libor    schedule 29.02.2012
comment
У кого-то еще была такая же проблема, но Компания не раскрывает, какое колдовство они использовали для подавления этой ошибки.   -  person Libor    schedule 29.02.2012
comment
Выбросьте инструменты, которые не подходят для их работы.   -  person Hans Passant    schedule 01.03.2012


Ответы (1)


Служба поддержки Babel.NET воспроизвела проблему и предложила добавить параметр командной строки:

--namelength 4

Так что конфликт имен будет менее вероятным.

Они протестировали неработающее решение и обнаружили, что запутанная сборка не имеет ошибок метаданных, но компилятор C ++ / CLI по-прежнему жалуется, что в данном типе есть два или более разных символа с одинаковым именем.

person Libor    schedule 01.03.2012