IsolatedStorage, пытающийся продемонстрировать разные уровни изоляции - не может для изоляции домена - PullRequest
0 голосов
/ 17 марта 2009

Я отредактировал и урезал это, чтобы попытаться закрыть его, потому что сайт побуждает меня принять ответ или добавить вознаграждение.

Я провел эксперимент, в котором были вызовы GetUserStoreForAssembly и GetUserStoreForDomain в библиотеке, на которую ссылается консольное приложение, но я не понимал, почему я получаю больше магазинов, чем ожидалось, в одном случае и меньше в другом.

Преет помог мне настроить мой эксперимент, и я столкнулся с двумя немного разными проблемами:

  • когда я скопировал консольное приложение в другой каталог (таким образом, имя осталось прежним), я получил два хранилища пользователей / сборок, т.е. по одному на копию, когда ожидал, что они поделятся

  • когда я загружал свою библиотеку в несколько доменов в консольном приложении, они все еще использовали одно и то же хранилище пользователей / сборок / доменов, когда я ожидал, что они не поделятся

К тому времени вопрос был холодным. Я прочитал сам и подумал, что нашел ответы, поэтому сам ответил на вопрос, надеясь, что кто-нибудь подтвердит / исправит. Но это было так далеко внизу списка не было никаких шансов. Я просто собирался оставить его, но затем мне предложили принять или добавить вознаграждение.

Итак, я переместил свой ответ сюда, и теперь мне просто нужен кто-то, чтобы добавить полезный комментарий, подтверждающий или исправляющий, чтобы я мог принять его и знать, что на самом деле это будет полезно всем, кто хочет лучше понять изолированное хранилище:

Возможный ответ на первый вопрос:

Сборки со строгими именами, конечно же, идентифицируются по их строгим именам. Слабо названные (не уверен, что это официальный термин, но какой-либо другой) идентифицируются по их URL или местонахождению файла. Таким образом, то же имя со слабым именем, скопированное в другой каталог, будет иметь свое отдельное изолированное хранилище.

Возможен ответ на второй вопрос (менее уверенный в этом вопросе):

Область, возвращаемая GetUserStoreForDomain, ограничена машиной, пользователем, приложением и сборкой, особенно той сборкой, которая выполняется в конкретном приложении.

Мой эксперимент создал несколько дополнительных доменов, но все они находятся в одном приложении. Поэтому все они используют одно и то же хранилище доменов.

Поэтому, чтобы имитировать изоляцию домена, мне нужно ссылаться на библиотеку из двух разных консольных приложений.

И это будет работать правильно, только если библиотека (и, следовательно, оба консольных приложения) имеют строгое имя. Ссылка на сборку приводит к тому, что она копируется, что означает, что если она имеет слабое имя, у нее будет отдельное хранилище изоляции.

Я только что проверил весь эксперимент с сильными именами. Теперь я получил 2 хранилища доменов и 1 хранилище сборок, как и ожидалось.

Ответы [ 2 ]

2 голосов
/ 18 марта 2009

Вы можете создать несколько доменов приложений в одной программе / процессе. Внутри приложения вы можете загрузить сборку. Вызов методов в каждом домене приложения / сборке

Есть примеры здесь (домены приложений) и здесь (AssemblyIdentity) и здесь

0 голосов
/ 18 марта 2009

Вы можете создать несколько доменов приложений в одной программе / процессе. Внутри приложения вы можете загрузить сборку. Вызов методов в каждом домене приложения / сборке

Есть примеры здесь

...