Не удалось предоставить минимальные запросы на разрешение.(Исключение из HRESULT: 0x80131417) - PullRequest
0 голосов
/ 30 декабря 2010

У меня есть приложение winforms, которое использует отражение для загрузки сборки X. Оно отлично работает с моей локальной машины, но вылетает при запуске из сетевой папки. Я создал группу кода, предоставляющую полное доверие (только для тестирования) сборкам из общего ресурса (указав свойство url). Приложение теперь запускается. Тем не менее, он бомбит, когда я пытаюсь выполнить операцию, которая требует X для доступа к зависимой сборке Y со следующей ошибкой:

Could not load file or assembly 'Bloomberg.Api, Version=1.8.0.3, 

Culture=neutral, PublicKeyToken=65c07ea3148235aa' or one of its dependencies. Failed to grant minimum 

permission requests. (Exception from HRESULT: 0x80131417)

Я загружаю сборку X в домен приложения, используя следующий код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.IO;
using System.Reflection;
using TCPSecurityMaster;
using System.Windows.Forms;
using System.Security.Policy;
using System.Security;
using System.Security.Permissions;

namespace SecurityMasterReflectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                AppDomainSetup ads = new AppDomainSetup();
                ads.ApplicationBase = ConfigurationManager.AppSettings["SecurityMasterBinDir"];
                ads.ConfigurationFile = Assembly.GetEntryAssembly().Location + ".config";
                AppDomain newAD = AppDomain.CreateDomain("SM", null, ads);


                string dir = ConfigurationManager.AppSettings["SecurityMasterBinDir"];
                string asmName = dir + "\\" + ConfigurationManager.AppSettings["SecurityMasterFacadeAssemblyName"];
                string typeName = ConfigurationManager.AppSettings["SecurityMasterFacadeClassName"];
                if (File.Exists(asmName))
                {
                    object obj = (ISecurityMasterAPI)newAD.CreateInstanceFromAndUnwrap(asmName, typeName);
                    ISecurityMasterAPI api = obj as ISecurityMasterAPI;
                    api.Initialize();
                    Form f = api.GetSecurityDetailDialog(35516);
                    f.ShowDialog();// this works, but a subsequent operation that requires assembly Y to be loaded doesn't
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

Я бы предположил, что предоставление полного доверия всем сборкам под общим сетевым ресурсом решило бы любые проблемы с CAS. Любые советы приветствуются.

- ОБНОВЛЕНИЕ

В моей кодовой группе я указал разрешение «Все» вместо «Полное доверие». Изменение на «Полное доверие» исправило ошибку. Тем не менее, я все еще озадачен тем, что я должен Настройте CAS только для использования отражения, в то время как код без отражения отлично работает в сети. Разве нет программного способа сказать: «Я полностью доверяю этой сборке, загруженной по сети»? Любой свет, пролитый на это ценится.

1 Ответ

0 голосов
/ 17 июня 2015

Я получил такую ​​же ошибку в powershell, когда запустил строку ниже:

Add-Type -Path WinSCPnet.dll

Все, что мне нужно было сделать, чтобы исправить эту проблему, это обновить powershell до v3.

http://www.microsoft.com/en-us/download/details.aspx?id=34595

Когда я пытался настроить параметры безопасности зоны (https://social.msdn.microsoft.com/Forums/en-US/d5135c8b-7629-464b-9078-8c179010ea82/minimum-permission-requests?forum=vblanguage),), я не смог найти инструмент настройки .Net Framework. Я думаю, что не смог его найти, потому что мой .Net Framework по умолчанию - 4.0.

...