我有一个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加载到appdomain中:
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问题。任何提示都赞赏。
- 更新
在我的代码组中,我将权限设置为“Everything”而不是“Full Trust”。 更改为“完全信任”修复了错误。但是,我仍然感到困惑,我必须这样做 调整CAS只是为了使用反射,而非反射代码在网络上工作正常。 是不是有一种程序化的方式说“我完全信任我通过网络加载的这个程序集。”? 任何关于此的灯光都会受到赞赏。
答案 0 :(得分:1)
答案 1 :(得分:0)
我在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框架是4.0。