У меня есть приложение 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 только для использования отражения, в то время как код без отражения отлично работает в сети.
Разве нет программного способа сказать: «Я полностью доверяю этой сборке, загруженной по сети»?
Любой свет, пролитый на это ценится.