Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AppDomain и System.Security??? Не могу загрузить сборки 
:(
    Опции темы
HerrOberst
Дата 24.8.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.8.2008
Где: Беларусь г.Новопо лоцк

Репутация: нет
Всего: нет



Уже совсем запарился с AppDomain ну ни как не могу загрузить сборку(DLL) в домен, чего только не пробовал  smile 
всегда выдает ошибку:

Сбой при запросе разрешения типа "System.Security.Permissions.SecurityPermission.....
Я так понимаю, что это связано с политикой безопасности.

Может, кто сможет объяснить чего делать надо. И главное как!
(Использую загрузку через домен, так как потом надо ету сборку выгрузить.)

Для наглядности приведу одну из моих попыток:
Код

string sLocation = "D:\File1.dll";
string sClassName = "Class1";

AppDomain appDomain = AppDomain.CreateDomain("Domain");

object copyClass = appDomain.CreateInstanceAndUnwrap(sLocation , sClassName)

Type copyClassType = copyClass.GetType();
//А далее переменную copyClassType уже использую для работы со сборкой - ета уже проверено



PM MAIL ICQ   Вверх
mullih
Дата 24.8.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 19.12.2006

Репутация: нет
Всего: 2



Попробуй изменить
Код

string sLocation = "D:\File1.dll";


на

Код

string sLocation = "D:\\File1.dll";


или

Код

string sLocation = @"D:\File1.dll";


если не в этом дела покажи если возможно дллельку
PM MAIL WWW Skype   Вверх
HerrOberst
Дата 25.8.2008, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.8.2008
Где: Беларусь г.Новопо лоцк

Репутация: нет
Всего: нет



mullih, не с этим проблем нету, - это я так по памяти для наглядности код ввел, ну и обшипся малость  smile (реальный код слишком здоровый.....)

Может просто у кого-нибудь тоже проблемы с загрузкой сборок в домен были. Связанные с политикой безопасности, и как это разрешилось?
PM MAIL ICQ   Вверх
HerrOberst
Дата 25.8.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.8.2008
Где: Беларусь г.Новопо лоцк

Репутация: нет
Всего: нет



mullih
Цитата

если не в этом дела покажи если возможно дллельку


Dll:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

    public class Class1
    {
        public static string BookmakerName
        {
            get 
            {
               return "Марафон";
            }
            set {}
        }

        public static string BookmakerNameUrl
        {
            get
            {
                return "www.marathonbet.com";
            }
            set { }
        }
    }

PM MAIL ICQ   Вверх
mullih
Дата 26.8.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 19.12.2006

Репутация: нет
Всего: 2



С AppDomain.CreateInstanceAndUnwrap не получилось. На сколько я понял там объект подымается используя прокси со своими заморочками, когдато сам мачался с этим, да и класс должен наследоватся от MarshalByRefObject. Но это уже к гуру Net Remoting. 

Как альтарнатива могу предложить решение без создания домена.

Код

            string sLocation = @"D:\Temp\123\ClassLibrary1\ClassLibrary1\bin\Debug\Lib.dll";
            string sClassName = "Class1";
            Assembly assembly = Assembly.LoadFile(sLocation);

            //тип нашего класса в дллельке
            Type copyClassType = assembly.GetType(sClassName);

            //собственно наш объект если надо
            object obj = Activator.CreateInstance(copyClassType);

            //получаем Property of BookmakerName, as example
            object result = copyClassType.InvokeMember("BookmakerName", BindingFlags.GetProperty, null, null, new object[] { });

            Console.WriteLine(result);
            Console.ReadKey();



Это сообщение отредактировал(а) mullih - 26.8.2008, 14:26
PM MAIL WWW Skype   Вверх
HerrOberst
Дата 26.8.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.8.2008
Где: Беларусь г.Новопо лоцк

Репутация: нет
Всего: нет



mullih,  спосибо, - это ясно  smile 

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

Других вариантов - вроде как нету, если конечно не парится с WinAPI
PM MAIL ICQ   Вверх
mullih
Дата 26.8.2008, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 19.12.2006

Репутация: нет
Всего: 2



Ну коль все так плохо тогда лови  smile 

Код

//Our Console Application

class Example
{
    public static void Main()
    {
        string assemblyName = "ClassLibrary1";

        AppDomainSetup mySetupInfo = new AppDomainSetup();

//dll лежит в папке приложения (не проверял с другими путями (няма часу играться, сори))
        mySetupInfo.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
        mySetupInfo.ApplicationName = assemblyName;
        mySetupInfo.LoaderOptimization = LoaderOptimization.SingleDomain;

        AppDomain myDomain = AppDomain.CreateDomain(assemblyName, null, mySetupInfo);

        Object obj = myDomain.CreateInstanceAndUnwrap(assemblyName, "Worker", false, BindingFlags.Public | BindingFlags.CreateInstance | BindingFlags.Instance, null, null, null, null, null);

        Type objType = obj.GetType();

        objType.InvokeMember("PrintDomain", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, obj, new object[] {});

        object result = objType.InvokeMember("BookmakerName", BindingFlags.GetProperty, null, null, new object[] { });

        Console.WriteLine(result);

        Console.ReadKey();
    }
}


Код

//Our Dll with assembly name "ClassLibrary1"
//на счет Serializable не помню где он надо а где нет но вроде он обязателен когда маршалин по значению идет
//абявазкова указываем маршалинг
[Serializable]
public class Worker : MarshalByRefObject
{
    public void PrintDomain()
    {
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
                AppDomain.CurrentDomain.FriendlyName);
    }

    public static string BookmakerName
    {
        get
        {
            return "Марафон";
        }
        set { }
    }
}


PM MAIL WWW Skype   Вверх
HerrOberst
Дата 3.10.2008, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 24.8.2008
Где: Беларусь г.Новопо лоцк

Репутация: нет
Всего: нет



Особая благодарность mullih
Для тех кому интересно привожу:
решение проблемы загрузки сборки в новый домен по адрсесу.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0711 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.