Pregunta

Escenario: Estoy en el proceso de refactorización una de nuestras aplicaciones para utilizar Nhibernate y me encontré con este problema un par de semanas atrás. La cuestión era originalmente con Nhibernate y Castillo y resolver esto fueron ambos vuelven a compilar con el [assembly: AllowPartiallyTrustedCallers]. Sin embargo después de hacer algunos cambios en la interfaz de usuario y el código base de este error ha vuelto a aparecer de nuevo. También digno de mención es que yo controlo la carga de mis controles de usuario mediante programación desde Form_Main.

Problema: Siempre que se generan los controles de usuario recibo el error a continuación. Si comento hacia fuera la carga a continuación, el programa se ejecutará. Cuando elimino errores que termina en la función InitializeComponent () que es generada automáticamente. Tenga en cuenta que no puedo entrar en esa función.

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: 

Alguien tiene alguna idea sobre el tema? Ya he añadido [assembly: AllowPartiallyTrustedCallers] para el montaje. ¿Hay alguna manera de saber qué referencia (?) Está causando este error? O cualquier forma de paso a través InitializeComponent ()?

NOTA:. He incluido todos los permisos y el proyecto se establece en confianza parcial

De todas formas cualquier ayuda es muy apreciada.

¿Fue útil?

Solución

OK, si yo fuera a solucionar este problema, yo lo enfoque de la siguiente manera:

1) Si estoy utilizando .NET 4.0 Asegúrese de que este ya se maneja.

2) Uso ILDASM o reflector para abrir todos los archivos DLL en cuestión en la carpeta bin para asegurarse AllowPartiallyTrustedCallersAttribute se fija en ellos.

3) Uso AppDomain.CurrentDomain.GetAssemblies() en el momento de error (usando ventana inmediata) para ver qué conjunto se carga desde dónde. Esto creo que podría ser su problema lo he visto demasiado a menudo que las versiones antiguas o sin escrúpulos de las asambleas se cargan desde GAC o varias carpetas bin

Creo que el uso de estos 3 pasos usted será capaz de encontrar su problema.

Otros consejos

Para todos los futuros lectores que pueden haber perdido los comentarios bajo la respuesta de Aliostad.

Básicamente lo que funcionó para mí estaba tomando el consejo de Aliostad y recompilar todas las referencias que pude con AllowPartiallyTrustedCallersAttribute . Para verificar los conjuntos que cargan Seguí Paso 2 de de Aliostad consejo. Una vez que había hecho de que todo el DLL requerido tenido ese atributo Incluí ese atributo en mi proyecto y ajuste mi proyecto a plena confianza (confianza no parcial).

Nota: Estoy utilizando Microsoft.Office.Interop.Outlook para enviar mensajes de correo electrónico y que requiere plena confianza, pero todavía permite que del otro DLL se ejecute en confianza parcial.

Espero que esto ayuda a los futuros usuarios. Cualquier pregunta apenas comentan a continuación.

Tengo este error al ejecutar un archivo DLL desde una ubicación de red. El DLL era una extensión para ESRI ArcGIS utilizando ArcObjects ejecutan en ArcGIS 10.1. Solución hacer proyecto no abierta de ubicación de red.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top