securitysafeccriticalattribute不允许部分信任的调用者.我错过了什么?

本文关键字:错过了 什么 调用者 不允许部 信任 securitysafeccriticalattribute | 更新日期: 2023-09-27 17:50:11

我正在运行一个SecurityException调用我的一个完全信任的方法:

Attempt by security transparent method '(partially trusted method)' to access 
security critical method 'ContainerSingleton.GetExportedValue<ICloudApplication>()' 
failed.
Assembly '(my assembly)' is partially trusted, which causes the CLR to make
it entirely security transparent regardless of any transparency annotations 
in the assembly itself.  In order to access security critical code, this 
assembly must be fully trusted.

似乎我应该能够克服这一点,通过添加一个securitysafeccriticalattribute到我的方法,但它不工作。下面是正在调用的完全可信类。

有没有人能看到我可能会错过什么或告诉我我需要做什么才能从部分可信的代码进行调用?

[SecuritySafeCritical]
public class ContainerSingleton
{
        static ContainerSingleton() {}
        [SecuritySafeCritical]
        public static T GetExportedValue<T>()
        {
            return ContainerInstance.GetExportedValue<T>();
        }
        private static CompositionContainer compositionContainer;
        public static CompositionContainer ContainerInstance
        {
            get 
            {              
                if (!IsInitialized)
                {
                    //initialize
                }
                return compositionContainer; 
            }
        }
        public static bool IsInitialized
        {
            get { return compositionContainer != null;  }
        }
        public static void Initialize(CompositionContainer container)
        {
            compositionContainer = container;
        }
    }
}

编辑:这里是当前的程序集属性,因为有人问。

[assembly: AssemblyTitle("...assembly name...")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("...assembly name...")]
[assembly: AssemblyCopyright("Copyright ©  2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("...")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

securitysafeccriticalattribute不允许部分信任的调用者.我错过了什么?

对于可从部分信任代码调用的完全信任程序集,它应该具有SecurityTransparentAttribute(在这种情况下,您不能在程序集中包含任何安全关键代码)或AllowPartiallyTrustedCallersAttribute程序集级别属性。如果没有这些属性,则完全信任程序集中的所有类型都是安全关键的,因此无法从部分信任代码访问。