Как WinSxS разрешает имена DLL к местоположениям DLL?

Некоторая производительность и метрики размера находятся на [1 112] эта страница . У меня нет статистики Jon на там в данный момент, просто потому что страница немного стара (Jon: мы должны зафиксировать это!).

Ре, являющееся прозрачным; protobuf-сеть может сцепиться в WCF по контракту; обратите внимание, что это играет приятно с MTOM по основному-http также. Это не работает с Silverlight, тем не менее, так как Silverlight испытывает недостаток в инжекционной точке. При использовании svcutil также необходимо добавить атрибут к классу (через частичный класс).

Ре BinaryFormatter (дистанционная работа); да, это имеет полный supprt; можно сделать это просто тривиальным ISerializable реализация (т.е. просто звонить Serializer метод с тем же args). Если Вы используете protogen для создания классов, то это может сделать это для Вас: можно включить это в командной строке через аргументы (она не включена по умолчанию, поскольку BinaryFormatter не работает над всеми платформами [CF, и т.д.]).

Примечание, что для очень маленьких объектов (единственные экземпляры, и т.д.) на локальной дистанционной работе (IPC), сырые данные BinaryFormatter производительность на самом деле лучше - но для нетривиальных графиков или удаленных каналов (сетевая дистанционная работа) protobuf-сеть может превзойти его по характеристикам вполне прилично.

я должен также отметить, что буферный формат провода протокола непосредственно не поддерживает наследование; protobuf-сеть может имитировать это (в то время как сдерживающая проводная совместимость), но как с XmlSerializer, необходимо объявить подклассы заранее.

, Почему там две версии?

радости открытого исходного кода, я предполагаю;-p Jon и я работали над совместными проектами прежде и обсудили слияние этих двух, но факт - то, что они предназначаются для двух различных сценариев:

  • (Jon's) dotnet-protobufs порт существующей версии Java. Это означает, что имеет очень знакомый API для кого-либо уже использование версии Java, и это основано на типичных конструкциях Java (классы разработчика, неизменные классы данных, и т.д.) - с несколькими скручиваниями C#.
  • protobuf-сеть (Marc's) является наземным переопределением после того же двоичного формата (действительно, критическое требование - то, что можно обменяться данными между различными форматами), но использование типичных идиом.NET:
    • изменяемые классы данных (никакие разработчики)
    • специфические особенности участника сериализации выражаются в атрибутах (сопоставимый с XmlSerializer, DataContractSerializer, и т.д.)

, Если Вы работаете над Java и клиентами.NET, Jon является, вероятно, хорошим выбором для знакомого API с обеих сторон. Если Вы - чистая.NET, protobuf-сеть имеет преимущества - знакомый API стиля.NET, но также и:

  • Вы не , вынудил быть контрактом сначала (хотя Вы можете, и генератор кода предоставляется)
  • , можно ли снова использовать существующие объекты (на самом деле, [DataContract] и [XmlType], классы могут часто использоваться без каких-либо изменений вообще)
  • , это имеет полную поддержку наследования (которого это достигает на проводе путем спуфинга инкапсуляции) (возможно уникальный для буферной реализации протокола? обратите внимание, что подклассы должны быть объявлены заранее)
  • , это старается изо всех сил включать и использовать базовые инструменты.NET (BinaryFormatter, XmlSerializer, WCF, DataContractSerializer) - разрешение его работать непосредственно механизмом дистанционной работы. Это, по-видимому, было бы вполне большим разделением от основной соединительной линии Java для порта Jon.

Ре, объединяющее их; я думаю, что мы оба были бы открыты для него, но кажется маловероятным, что Вы хотели бы оба набора функций, так как они предназначаются для таких различных требований.

6
задан user184323 5 October 2009 в 17:51
поделиться

1 ответ

Это делается через «контекст активации». На мой взгляд, WinSxS не имеет никакого смысла, пока вы не узнаете о контексте активации и о том, как им управлять.

Я разместил довольно длинное сообщение в блоге, объясняющее детали, на http: //omnicognate.wordpress. com / 2009/10/05 / winsxs / .

Подводя итог статье, контекст активации - это структура, которую WinSxS использует во время выполнения для преобразования имен неверсированных объектов (например, имен DLL) в полную информацию о том, как найти их. Назначение «манифестов» в WinSxS - создание контекстов активации. Не понимая, как и когда создаются эти контексты активации и как ими управлять (они хранятся в локальном стеке потока), невозможно осмыслить шаги, связанные с загрузкой DLL через WinSxS, и поэтому невозможно диагностировать большинство проблем, которые могут возникнуть.

7
ответ дан 17 December 2019 в 00:11
поделиться