Question

Scénario: Je suis en train de refactorisation une de nos applications à utiliser NHibernate et suis tombé sur cette question de retour quelques semaines. La question était à l'origine avec NHibernate et du château et de résoudre cela, ils ont tous deux été recompilés avec le [assembly: AllowPartiallyTrustedCallers]. Cependant après avoir fait quelques modifications à l'interface utilisateur et codebase cette erreur est réapparu à nouveau. Il convient également de noter est que je contrôle le chargement de mes contrôles utilisateur par programmation à partir Form_Main.

Problème: Chaque fois que les contrôles utilisateur sont générés je reçois l'erreur ci-dessous. Si je commente le chargement puis le programme sera exécuté. Quand je déboguer termine à la fonction InitializeComponent () qui est généré automatiquement. Notez que je ne peux pas entrer dans cette fonction.

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: 

Quelqu'un a des idées sur le sujet? Je l'ai déjà ajouté [montage: AllowPartiallyTrustedCallers] à l'assemblée. Est-il un moyen de savoir quelle référence (?) Est à l'origine de cette erreur? Ou un moyen de pas dans InitializeComponent ()?

NOTE:. J'ai tout compris l'autorisation et le projet est mis à la confiance partielle

Enfin bref toute aide est grandement appréciée.

Était-ce utile?

La solution

OK, si je devais résoudre ce problème, je l'aborder comme ci-dessous:

1) Si j'utilise .NET 4.0 Assurez-vous que ce est déjà traité.

2) Utilisez ILDASM ou réflecteur pour ouvrir toutes les DLL en question sur le dossier bin pour faire AllowPartiallyTrustedCallersAttribute vous est fixé sur eux.

3) Utilisation AppDomain.CurrentDomain.GetAssemblies() au moment de l'erreur (en utilisant la fenêtre immédiate) pour voir qui est chargé à partir de l'assemblage où. Je pense que ce pourrait être votre problème comme je l'ai vu trop souvent que les anciennes versions ou voyous d'ensembles sont chargés à partir GAC ou plusieurs dossiers bin

Je pense que l'utilisation de ces 3 étapes, vous serez en mesure de trouver votre problème.

Autres conseils

Pour tous les futurs lecteurs qui ont pu manquer les commentaires sous la réponse de Aliostad.

En fait ce qui a fonctionné pour moi prenais de Aliostad des conseils et recompiler toutes les références que je pouvais avec AllowPartiallyTrustedCallersAttribute . Pour vérifier les assemblages chargés je suivais Étape 2 de Aliostad conseils. Une fois que je l'avais fait en sorte que tous les dll de besoin avait que l'attribut j'inclus cet attribut dans mon projet, puis mis mon projet à pleine confiance (non confiance partielle).

Remarque: J'utilise Microsoft.Office.Interop.Outlook pour envoyer des courriels et exige une confiance totale, mais permet encore à courir en fiducie partielle de l'autre dll.

Hope this aider les utilisateurs futurs. Pour toute question juste au-dessous des commentaires.

Je suis cette erreur lors de l'exécution d'une dll à partir d'un emplacement réseau. La dll est une extension pour ArcGIS en utilisant ArcObjects en cours d'exécution dans ArcGIS 10.1. Solution ne pas ouvrir de projet emplacement réseau.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top