Domanda

Scenario: Io sono nel processo di refactoring una delle nostre applicazioni per utilizzare NHibernate e sono imbattuto in questo problema un paio di settimane fa. Il problema era in origine con NHibernate e Castello e per risolvere questo erano entrambi ricompilati con la [assembly: AllowPartiallyTrustedCallers]. Tuttavia dopo aver apportato alcune modifiche alla UI e codebase questo errore è riapparso di nuovo. Anche la pena notare è che io controllo il carico i miei controlli utente a livello di codice da Form_Main.

Problema: Ogni volta che i controlli utente sono generate ricevo l'errore sotto. Se io commento il carico allora il programma verrà eseguito. Quando metto a punto che termina alla funzione InitializeComponent (), che è generato automaticamente. Nota che non posso entrare in quella funzione.

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: 

Qualcuno ha qualche idea in proposito? Ho già aggiunto [assembly: AllowPartiallyTrustedCallers] per l'assemblaggio. C'è un modo per scoprire quale di riferimento (?) Sta causando questo errore? O un modo per passo attraverso InitializeComponent ()?

Nota. Ho tutti i permessi in dotazione e il progetto è impostato su attendibilità parziale

In ogni modo ogni aiuto è molto apprezzato.

È stato utile?

Soluzione

OK, se dovessi risolvere questo problema, mi si avvicinerebbe come qui sotto:

1) Se sto usando .NET 4.0 Assicurarsi che questo è già gestita.

2) Uso ILDASM o riflettore per aprire tutte le DLL in questione sulla cartella bin per assicurarsi AllowPartiallyTrustedCallersAttribute sia impostato su di loro.

3) Uso AppDomain.CurrentDomain.GetAssemblies() al momento dell'errore (usando finestra immediata) per visualizzare il quale complesso è caricato da dove. Questo penso che potrebbe essere il vostro problema come ho visto troppo spesso che le versioni vecchie o canaglia di assembly vengono caricati dal GAC o varie cartelle bin

Credo che l'utilizzo di questi 3 passi si sarà in grado di trovare il vostro problema.

Altri suggerimenti

Per tutti i futuri lettori che possa aver perso i commenti sotto la risposta di Aliostad.

In sostanza ciò che ha funzionato per me stava prendendo del Aliostad consigli e ricompilare tutti i riferimenti ho potuto con AllowPartiallyTrustedCallersAttribute . Per verificare le assemblee che ha caricato ho seguito Passaggio 2 di del Aliostad consigli. Una volta avevo fatto in modo tutto ciò che l'attributo avuto la dll richiesta ho incluso quell'attributo nel mio progetto e quindi impostare il mio progetto a fiducia completa (non attendibilità parziale).

Nota: Sto usando Microsoft.Office.Interop.Outlook per inviare email e richiede la piena fiducia, ma consente ancora dell'altro dll per l'esecuzione in attendibilità parziale.

Spero che questo aiuto futuri utenti. Tutte le domande solo commento qui sotto.

ho ottenuto questo errore quando si esegue un DLL da un percorso di rete. La dll è un'estensione per ESRI ArcGIS utilizzando ArcObjects in esecuzione in ArcGIS 10.1. Soluzione fare progetto non aperta dal percorso di rete.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top