Сериализация протобуфа с обфускацией
Я ищу некоторые указания относительно того, что происходит при использовании протобуф-сети с обфускацией (Dotfuscator). Одна половина проекта - это DLL, а другая - EXE-файл, и с помощью proto-buf NET они безошибочно обмениваются данными. Пока я не запутываю DLL.
В этот момент P-BN завершается неудачно, не вызывая исключения, возвращая по-разному байтовый массив длиной 0 или сокращенный в зависимости от того, с чем я возился. Класс довольно прост (VB):
<ProtoContract(Name:="DMailer")> _
Friend Class DMailer
Private _Lic As Cert
Private _Sys As Sys
Private _LList As List(Of LItem)
..
..
End Class
Есть 3 реквизита, все украшенные ProtoMember, чтобы получить / установить составляющие объекты класса. Подрезал для краткости.
Снова, это работает БОЛЬШОЙ, пока я не запутываю DLL. Затем Dotfuscator переименовывает каждый из них в ноль, по-видимому, так как все они Friend, и это, кажется, душит прото-бафф. Если я освобождаю класс от переименования (только имя класса, а не реквизиты / члены), он снова работает. Имеет смысл, что P-BN сможет работать только с объектами с правильным именем, хотя при запросе сериализации объекта с нулевым именем кажется, что исключение может быть в порядке.
С другой стороны, большая часть прелести PB-N должна быть сериализациейнезависимый имен .NET, работающих с атрибутами - по крайней мере, как я понимаю. Однако в этом случае кажется, что он работает только с классами с именами. Я попробовал, спеть квалификатор или аргумент «Имя», как показано выше, но безрезультатно - он явно не выполняет то, что, как я думал, может.
Итак, мне любопытно, если:
а) ... я в принципе правильно предположил проблему
б) ... есть какой-то другой атрибут или флаг, который может облегчить сериализацию объекта с нулевым именем
в) ... если есть какие-то другие идеи, которые могут помочь.
Если я освобождаю все 3 или 4 класса от переименования Dotfuscator (LList фактически еще не реализован, оставляя DMailer, Cert и Sys), DLL снова работает - по крайней мере, вывод имеет правильный размер. Я могу с этим смириться, хотя затемненные имена были бы лучше: Dotfuscator (CE) либо исключает их, либо задает имена равными Null - мне кажется, я не могу найти способ заставить их переименовать.
Вместо того, чтобы освобождать 3 или 4 класса от переименования, я рассматриваю одну альтернативу - просто сохранить выходные данные Serializer для Cert и Sys как байтовые массивы или строки Base64 в DMailer вместо классов. Затем пусть получатель десериализует каждый объект индивидуально. Приятно иметь возможность распаковывать только одну вещь и иметь свои игрушки прямо там, как по волшебству.
(Много) ТИА