
– Event Counters
– Using dotnet-counters with Docker
– Listening to outbound HTTP
– Listening to inbound HTTP requests
– An alternative approach to using dotnet-counters with Docker
Size: a a a
Приватные сборки
видны только самому приложению и никому более, т. е. приложение изолируется от внешнего воздействия, как других программ, так и самой операционной системы. Соответственно, они лишены многих проблем, связанных с совместными сборками. К примеру, такой, как уникальность имен: так как сборка локальная, нет необходимости заботиться об уникальности имен во всем глобальном пространстве имен. CLR при запуске приложения прочитает его манифест и определит, какие сборки необходимы. Затем будет произведен процесс зондирования (probing) рабочего каталога приложения на предмет нужной сборки. Необходимая сборка определяется по имени файла, определенного в манифесте.Совместные сборки
могут быть использованы сразу несколькими приложениями. К таким сборкам предъявляются более строгие правила, чем к приватным сборкам, например: необходима уникальность имен сборки, т. е. имена внутри сборки не должны конфликтовать с уже существующими в глобальном пространстве имен, предоставляемом средой исполнения по умолчанию. Действия системы управления версиями при поиске необходимых сборок могут быть изменены при помощи политики версий, которую сможет изменять администратор или автор приложения. Данная политика позволит принудительно изменить версию сборки, запрашиваемой приложением, а также поведение среды исполнения при поиске и загрузке сборок. Таким образом, имеется возможность «заставить» приложение использовать сборку другой версии, даже если оно на это не рассчитано. Данная политика настраивается при помощи файла конфигурации, который помещается в каталог приложения и имеет то же имя, что и у приложения, только с расширением .config. Совместные сборки хранятся в глобальном кэше сборок.Манифест сборки
— это внутренняя часть сборки, которая позволяет ей быть самоописанной. Он позволяет идентифицировать сборку, указывает файлы, которые включаются в реализацию сборки, описывает типы и ресурсы, используемые в сборке, указывает зависимости от других сборок, а также набор прав доступа, которые необходимы сборке для корректной работы. Эта информация используется во время выполнения для разрешения ссылок, проверки корректности версий и целостности загруженных сборок.[DllImport("Kernel32", CharSet=CharSet.Auto, SetLastError=true)]
volatile
означает, что поле может изменить несколько потоков, выполняемых одновременно. Добавление модификатора volatile
гарантирует, что все потоки будут видеть временные записи, выполняемые другим потоком, в порядке их выполнения. Нет никакой гарантии единого общего прядка временных записей во всех потоках выполнения.volatile
может применяться к полям следующих типов:sbyte
, byte
, short
, ushort
, int
, uint
, char
, float
и bool
.enum
с одним из следующих базовых типов: byte
, sbyte
, short
, ushort
, int
или uint
.volatile
можно применять только к полям class
или struct
. Локальные переменные не могут объявляться как volatile
.Immutable
означает, что данные, хранящиеся в переменной, не могут быть изменены. При этом значение переменной может быть изменено посредством отказа от использования старых данных, которые могут быть изменены. Оригинальные данные остаются в памяти, а новые значения создаются вновь, в новой области памяти.