Эта сборка не позволяет частично доверчивому абонентам. Initializecomponent ()

StackOverflow https://stackoverflow.com/questions/4314420

Вопрос

Сценарий: Я нахожусь в процессе рефакторирования одного из наших приложений для использования Nhibernate и наткнулся на этот вопрос пару недель назад. Проблема была изначально с Nhibernate и Castle, и для решения этого они оба перекомпилировались с помощью [assembly: AllowPartiallyTrustedCallers]. Отказ Однако после внесения некоторых изменений в пользовательском интерфейсе и кодовой базе эта ошибка снова появилась. Также стоит отметить, что я управляю программной загрузкой управления пользователем из Form_main.

Проблема: Всякий раз, когда генерируется пользователем элементы управления, я получаю ошибку ниже. Если я прокомментирую загрузку, то программа будет работать. Когда я отлаживаю, это заканчивается на функции инициализации (), которая является автоматической генерированием. Обратите внимание, что я не могу вступить в эту функцию.

System.Security.SecurityException was unhandled
      Message="That assembly does not allow partially trusted callers."
      Source="A"
      GrantedSet=""
      PermissionState=""
      RefusedSet=""
      Url="file:///C:/Documents and Settings/ID/Desktop/A-NHIB2/bin/Debug/A.EXE"
      StackTrace:
           at A.UserControlCyber.InitializeComponent()
           at A.UserControlCyber..ctor() in C:\Documents and Settings\ID\Desktop\A-NHIB2\UserControl_Cyber.cs:line 34
           at A.FormMain.FormMainLoad(Object sender, EventArgs e) in C:\Documents and Settings\ID\Desktop\A-NHIB2\Form_Main.cs:line 30
           at System.Windows.Forms.Form.OnLoad(EventArgs e)
           at System.Windows.Forms.Form.OnCreateControl()
           at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
           at System.Windows.Forms.Control.CreateControl()
           at System.Windows.Forms.Control.WmShowWindow(Message& m)
           at System.Windows.Forms.Control.WndProc(Message& m)
           at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
           at System.Windows.Forms.ContainerControl.WndProc(Message& m)
           at System.Windows.Forms.Form.WmShowWindow(Message& m)
           at System.Windows.Forms.Form.WndProc(Message& m)
           at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           at System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
           at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
           at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
           at System.Windows.Forms.Control.set_Visible(Boolean value)
           at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           at System.Windows.Forms.Application.Run(Form mainForm)
           at A.Program.Main() in C:\Documents and Settings\ID\Desktop\A-NHIB2\Program.cs:line 32
           at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
           at System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
           at System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
           at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
           at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
           at System.Activator.CreateInstance(ActivationContext activationContext)
           at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
           at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           at System.Threading.ExecutionContext.runTryCode(Object userData)
           at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
           at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
           at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           at System.Threading.ThreadHelper.ThreadStart()
      InnerException: 

У кого -нибудь есть идеи по этому вопросу? Я уже добавил [сборку: AllowpartivallyTrustedCallers] в сборку. Есть ли способ узнать, какая ссылка (?) Вызывает эту ошибку? Или какой -нибудь способ пройти через initializecomponent ()?

ПРИМЕЧАНИЕ: У меня есть все разрешения, и проект настроен на частичное доверие.

В любом случае, любая помощь высоко ценится.

Это было полезно?

Решение

Хорошо, если бы я не устраивал эту проблему, я бы подошел к ней, как ниже:

1) Если я использую .NET 4.0 убедитесь это уже обрабатывается.

2) Используйте ILDASM или отражатель, чтобы открыть все рассматриваемые DLL в папке BIN, чтобы убедиться AllowPartiallyTrustedCallersAttribute установлен на них.

3) Использовать AppDomain.CurrentDomain.GetAssemblies() во время ошибки (с использованием непосредственного окна), чтобы увидеть, какая сборка загружается откуда. Я думаю, что это может быть вашей проблемой, так как я слишком часто видел, что старые или мошеннические версии сборок загружаются из GAC или различных папок Bin

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

Другие советы

Для всех будущих читателей Кто, возможно, пропустил комментарии в соответствии с ответом Алиостада.

В основном то, что сработало для меня, взяло Алиостад советы и перекомпикация всех ссылок, с которыми я мог AllowPartivallyTrustedCallersattribute. Отказ Чтобы проверить загруженные сборки, я следовал Шаг 2 из Алиостад совет. Как только я позаботился о том, чтобы все необходимые DLL имели тот атрибут, который я включил этот атрибут в свой проект, а затем установил свой проект на Полное доверие(не частичное доверие).

Примечание: Я использую Microsoft.Office.interop.oundlook, чтобы отправить электронные письма, и это требует полного доверия, но до сих пор позволяет другим dll работать в частичном доверии.

Надеюсь, это поможет будущим пользователям. Любые вопросы просто комментируют ниже.

Я получил эту ошибку при запуске DLL из сети. DLL был расширением для ESRI ArcGIS с использованием ArcObjects, работающих в ArcGIS 10.1. Решение не открывает проект из сетевого местоположения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top