Nano Hash - криптовалюты, майнинг, программирование

Что происходит, когда я загружаю сборку?

В моем приложении ASP.NET MVC у меня есть следующая настройка:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="bin;extras"/>

Я ссылался на сборки, расположенные в папке extras в представлениях, и они отлично работали (используя <%@ Import Namespace="myNameSpace" %>).

Мои вопросы

  1. Что происходит, когда вызывается эта линия?
  2. Куда загружается сборка?
  3. Почему я не могу перезаписать сборку, расположенную в папке extras, содержащей myNameSpace, более новой версией? (выдает ошибку, что сборка "открыта" в другой программе)
  4. Есть ли способ перезаписать сборку более новой версией без перезапуска приложения?
06.03.2010

Ответы:


1

1) Импорт на самом деле ничего не делает во время выполнения. Это удобство времени компиляции, которое просто позволяет вам ссылаться на типы, используя их неполные имена, такие как Environment вместо System.Environment.

2) Сборка загружается с использованием обычных правил проверки сборки. CLR проверяет различные местоположения перед этими частными путями зондирования, поэтому важно помнить об этом. Если вы ссылаетесь на сборку со строгим именем и ожидаете найти эту сборку в частном пути проверки, предпочтительнее сборка с таким же строгим именем (имя, версия, открытый ключ и т. д.) в GAC. Иногда это может приводить к непредвиденному поведению и обычно вызвано тем, что версия сборки жестко запрограммирована в файле AssemblyInfo.cs и вы забыли ее обновить.

3) После загрузки сборку нельзя выгрузить без выгрузки AppDomain. Но ASP.NET использует «теневое копирование», что означает, что сборки копируются во временный путь перед загрузкой. Это должно оставить исходную сборку разблокированной, и ее можно будет перезаписать. Навскидку, я не уверен, почему вы получаете сообщение об ошибке о заблокированных сборках. В обычном приложении Windows это было бы совершенно нормально и ожидаемо. Но ASP.NET спроектирован так, что вы можете перезаписывать содержимое, код, сборки и т. д. во время работы приложения, что приводит к № 4.

4) На практике нет. Поскольку сборку нельзя выгрузить, невозможно обновить сборку без перезапуска веб-приложения. С технической точки зрения, вы можете загрузить несколько версий сборки, но это не даст желаемых результатов. Любые ссылки во время компиляции по-прежнему будут ссылаться на старую сборку, и вы получите все виды недопустимых исключений приведения, если попытаетесь использовать новую сборку. Но, как я сказал в № 3, в ASP.NET обновление сборок должно быть таким же простым, как замена файлов, и должно происходить автоматически. Вам не нужно перезапускать IIS или рабочие процессы вручную.

Следующие ссылки могут быть интересны.

Как среда выполнения находит сборки
Рекомендации по загрузке сборок
Сборки теневого копирования
Выгрузка сборок — Сюзанна Кук

ОБНОВЛЕНИЕ Прочитав немного больше о теневом копировании, я думаю, что причина, по которой вы можете столкнуться с проблемой заблокированных сборок в папке extras, заключается в том, что ASP.NET, вероятно, указывает только папку «bin» для теневое копирование.

18.03.2010

2
  1. Я думаю, что это то же самое, что и оператор using в C#, это в основном означает, что классы пространства имен теперь доступны для использования на вашей странице.
  2. Сборка будет загружена в память, вероятно, процессом aspnetwp.exe
  3. Если сборка в настоящее время используется, вы получите это сообщение об ошибке
  4. Перезапуск — это самый безопасный известный мне способ сделать это, вы можете использовать внедрение зависимостей или позднее связывание для достижения того же результата. Мне просто интересно, почему вы хотите переключать сборку во время работы приложения?
13.03.2010
  • # 4: Замените его обновленной версией. Возможно ли это во время его работы? 13.03.2010
  • ЕСЛИ вы используете инъекцию зависимостей и программу для интерфейса, вы можете сделать это легко. 13.03.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..