Я ищу руководство относительно того, что происходит при использовании сети proto-buf с обфускацией (Dotfuscator). Одна половина проекта - это DLL, а другая - EXE в другом месте, и с помощью proto-buf NET они безупречно обмениваются данными. Пока я не запутаю DLL.
В этот момент P-BN терпит неудачу, не вызывая исключения, возвращая по-разному массив байтов нулевой длины или укороченный, в зависимости от того, с чем я возился. Класс довольно простой (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 переименовывает каждый из них в null, по-видимому, поскольку все они являются Другом, и это, кажется, подавляет прото-бафф. Если я освобождаю класс от переименования (только имя класса, а не реквизиты / члены), похоже, он снова работает. Имеет смысл, что P-BN сможет действовать только с объектами с собственным именем, хотя, когда его просят сериализовать объект с нулевым именем, кажется, что исключение может быть в порядке.
С другой стороны, большая часть прелести PB-N заключается в независимой сериализации имен .NET, работающих с атрибутами - по крайней мере, как я это понимаю. Но в этом случае он работает только с классами с именами. Я попытался использовать квалификатор или аргумент Name, как показано выше, но безрезультатно - он, по-видимому, не делает того, что я думал.
Итак, мне любопытно, если:
а) ... я в принципе правильно догадался о проблеме
б) ... Есть другой атрибут или флаг, который может облегчить сериализацию объекта с нулевым именем.
c) ... если есть какие-то другие идеи, которые могут помочь.
Если я освобожу все 3 или 4 класса от переименования Dotfuscator (LList еще не реализован, оставив DMailer, Cert и Sys), DLL, похоже, снова заработает - по крайней мере, результат будет правильного размера. Я могу смириться с этим, хотя скрытые имена были бы лучше: Dotfuscator (CE) либо исключает их, либо устанавливает для имен значение Null - похоже, я не могу найти способ заставить их переименовать.
Вместо того, чтобы освобождать от переименования 3 или 4 класса, я рассматриваю одну альтернативу - просто сохранить вывод Serializer для Cert и Sys в виде массивов байтов или строк Base64 в DMailer вместо классов. Затем попросите получателя десериализовать каждый объект индивидуально. Приятно иметь возможность распаковать только одну вещь и получить свои игрушки прямо здесь, как по волшебству.
(много) TIA