Эта сборка не допускает частично доверенных абонентов. InitializeComponent () - PullRequest
11 голосов
/ 30 ноября 2010

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

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

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: 

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

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

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

Ответы [ 3 ]

7 голосов
/ 06 декабря 2010

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

В основном то, что у меня получалось, - это совет Алиостада и перекомпиляция всех ссылок, которые я мог, с AllowPartiallyTrustedCallersAttribute .Чтобы проверить загруженные сборки, я следовал Шаг 2 из Aliostad's совета.Убедившись, что все необходимые библиотеки DLL имеют этот атрибут, я включил этот атрибут в свой проект, а затем установил для своего проекта полное доверие (не частичное доверие).

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

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

7 голосов
/ 30 ноября 2010

ОК, если бы я решил эту проблему, я бы подошел к ней следующим образом:

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

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

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

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

3 голосов
/ 03 апреля 2014

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

...