Share via


StrongNameIdentityPermission 类

为强名称定义标识权限。无法继承此类。

**命名空间:**System.Security.Permissions
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public NotInheritable Class StrongNameIdentityPermission
    Inherits CodeAccessPermission
用法
Dim instance As StrongNameIdentityPermission
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public sealed class StrongNameIdentityPermission : CodeAccessPermission
[SerializableAttribute] 
[ComVisibleAttribute(true)] 
public ref class StrongNameIdentityPermission sealed : public CodeAccessPermission
/** @attribute SerializableAttribute() */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class StrongNameIdentityPermission extends CodeAccessPermission
SerializableAttribute 
ComVisibleAttribute(true) 
public final class StrongNameIdentityPermission extends CodeAccessPermission

备注

如果确认调用代码位于特定的具有强名称的代码程序集中,则可以使用 StrongNameIdentityPermission 来实现对版本控制与命名的保护。

强名称标识基于一个名为 Blob 的加密公钥,它还可以与特定程序集的名称和版本结合。密钥定义唯一的命名空间,提供强验证核实该名称是真实的,原因在于该名称的定义必须位于由对应私钥签名的程序集内。

请注意:强名称密钥的有效性不依赖于必须为该密钥颁发的任何证书或信任关系。

提示

仅当堆栈中的所有程序集都有正确的证据来满足请求时,对 StrongNameIdentityPermission 的完全请求才能成功。而只要直接调用方有正确的证据,使用 StrongNameIdentityPermissionAttribute 的链路请求就能成功。

有关强名称的完整说明,请参见 StrongName。有关具有强名称的程序集的更多信息,请参见 具有强名称的程序集

StrongNameIdentityPermission 类用于定义访问类型的公共成员的强名称要求。StrongNameIdentityPermissionAttribute 属性可用于定义程序集级别的强名称要求。在 .NET Framework 2.0 版中,还可以使用 InternalsVisibleToAttribute 指定该程序集中的所有非公共类别对另一个程序集是可见的。有关更多信息,请参见 友元程序集(C# 编程指南)

示例

下面的代码示例阐释了如何使用 StrongNameIdentityPermission 类。此示例为类库的形式,它同时应用 StrongNameIdentityPermissionAttribute 属性和 StrongNameIdentityPermission 以要求用特定的强名称对调用方进行签名。

' The following commented code should be compiled as a console application to execute the 
' class library example.
'
'Imports System
'Imports System.Reflection
'Imports StrongNamedLibVb

'<Assembly: AssemblyVersion("1.0.0.0")> 
'<Assembly: AssemblyKeyFile("snKey.snk")> 
'Public Class StrongNameTest

'    ' Demonstrate the declarative and imperative forms of the StrongNameIdentityPermission.
'    Public Shared Sub Main()
'        Try
'            Dim signed As New Signed
'            signed.GetWindirImperative()
'            signed.GetWindirDeclarative()
'            Console.WriteLine("Called the signed library successfully.")
'        Catch e As Exception
'            Console.WriteLine(("Exception thrown in called assembly: " + e.Message))
'        End Try
'    End Sub 'Main
'End Class 'StrongNameTest
Imports System
Imports System.Security.Permissions
Imports System.Reflection
Imports Microsoft.VisualBasic

<assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyKeyFile("snKey.snk")> 
' Demand that the calling assembly has a specific strong name key.
' Use Sn.exe to generate the public key string used for the demand.
<StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey:= _
        "0024000004800000940000000602000000240000525341310004000001000100ed92913322617b" + _
        "c45aae29aaaddd29c1af270797b200e698da08ceceaa546f911ad09ef0f6dbe4221fa30b8210c7" + _
        "6fe004702e540068e526273f35bd009d2026226d00ab72f4223b09e896c0f7af688fab2adb4242" + _
        "c2bfda793b5c2a259e0d6cd2bd09cbcc20305bd465c113e36b19854602dc53ce4766f568fc576d" + _
        "be3822b4")> _
Public Class Signed
    ' Read the environment windir variable.
    Public Sub GetWindirImperative()
        Try
            ' Use Sn.exe to generate the byte array for the public key.
            Dim b1 As Byte() = {0, 36, 0, 0, 4, 128, 0, 0, 148, 0, 0, 0, 6, 2, 0, 0, 0, _
                36, 0, 0, 82, 83, 65, 49, 0, 4, 0, 0, 1, 0, 1, 0, 237, 146, 145, 51, 34, _
                97, 123, 196, 90, 174, 41, 170, 173, 221, 41, 193, 175, 39, 7, 151, 178, 0, _
                230, 152, 218, 8, 206, 206, 170, 84, 111, 145, 26, 208, 158, 240, 246, 219, _
                228, 34, 31, 163, 11, 130, 16, 199, 111, 224, 4, 112, 46, 84, 0, 104, 229, _
                38, 39, 63, 53, 189, 0, 157, 32, 38, 34, 109, 0, 171, 114, 244, 34, 59, 9, _
                232, 150, 192, 247, 175, 104, 143, 171, 42, 219, 66, 66, 194, 191, 218, 121, _
                59, 92, 42, 37, 158, 13, 108, 210, 189, 9, 203, 204, 32, 48, 91, 212, 101, _
                193, 19, 227, 107, 25, 133, 70, 2, 220, 83, 206, 71, 102, 245, 104, 252, _
                87, 109, 190, 56, 34, 180}

            ' Specify the version of the calling assembly.
            Dim v1 As New Version("1.0.0.0")
            Dim blob As New StrongNamePublicKeyBlob(b1)
            If (ComparePublicKeys()) Then
                Console.WriteLine("Calling assembly has same key as this assembly.")
            Else
                Console.WriteLine("Calling assembly has different key than this assembly.")
            End If
            ' Create different permissions to exercise the set operations.
            Dim snPerm As New StrongNameIdentityPermission(blob, "StrongNamedExeVb", v1)
            snPerm.Demand()
            ' Return the location of the Windows directory that is found in 
            ' the windir environment variable.
            Console.WriteLine(Environment.GetEnvironmentVariable("windir"))
        Catch e As Exception
            Console.WriteLine(("Exception thrown in called assembly: " + e.Message))
        End Try
    End Sub 'GetWindir
    Public Sub GetWindirDeclarative()
        Try
            ' Return the location of the Windows directory that is found in 
            ' the windir environment variable.
            Console.WriteLine(Environment.GetEnvironmentVariable("windir"))
        Catch e As Exception
            Console.WriteLine(("Exception thrown in called assembly: " + e.Message))
        End Try
    End Sub 'GetWindir

    Public Shared Function ComparePublicKeys() As Boolean
        Try
            Dim callingAssembly As [Assembly]

            ' Create a target object.
            Dim Integer1 As New Int32
            Dim Type1 As Type

            ' Set the Type instance to the target class type.
            Type1 = Integer1.GetType()

            ' Create an instance of the assembly class to house the Integer type.  
            callingAssembly = [Assembly].GetAssembly(Integer1.GetType())

            ' Display the name of the calling assembly.
            Dim entryAssembly As [Assembly] = [Assembly].GetEntryAssembly()
            Dim mainAssembly As String = entryAssembly.FullName

            Console.WriteLine(("Calling assembly = " + entryAssembly.FullName))

            ' Get the name of the assembly being called (this assembly).
            Dim thisAssembly As String = [Assembly].GetCallingAssembly().FullName

            Console.WriteLine(("Called assembly=" + thisAssembly))

            Dim tokenIndex1 As Integer = thisAssembly.LastIndexOf("PublicKeyToken")
            Dim tokenIndex2 As Integer = mainAssembly.LastIndexOf("PublicKeyToken")
            Dim testString1 As String = thisAssembly.Substring(tokenIndex1, 31)
            Dim testString2 As String = mainAssembly.Substring(tokenIndex2, 31)

            Return testString1.Equals(testString2)
        Catch
            Console.WriteLine("This is an unexpected exception")
            Throw
        End Try
    End Function 'ComparePublicKeys
End Class 'Signed
//The following commented code should be compiled as an console application to execute the
// class library example.
//
//using System;
//using System.Reflection;
//using SignedLib;
//[assembly: AssemblyVersion("1.0.0.0")]
//[assembly: AssemblyKeyFile("snKey.snk")]
//public class StrongNameTest
//{
//  // Demonstrate the declarative and imperative forms of the StrongNameIdentityPermission.
//  public static void Main()
//  {
//      try
//      {
//            Signed signedLib = new Signed();
//            signedLib.GetWindirImperative();
//            signedLib.GetWindirDeclarative();
//            Console.WriteLine( "Called the signed library assembly methods successfully.");
//      }
//      catch (Exception e)
//      {
//            Console.WriteLine( "Exception thrown in called assembly: " + e.Message);
//      }
//   }
//}
//
// Class library example to demonstrate StrongNameIdentityPermission and 
// StrongNameIdentityPermissionAttribute.
using System;
using System.Security.Permissions;
using System.Reflection;
[assembly: AssemblyVersion("1.0.*")]
[assembly :AssemblyKeyFile("snKey.snk")]
namespace SignedLib
{

    public class Signed
    {
        // Read the windir environment variable.
        public void GetWindirImperative()
        {
            try
            {
                // Use Sn.exe to generate the byte array for the public key.
                byte[] b1 = { 0, 36, 0, 0, 4, 128, 0, 0, 148, 0, 0, 0, 6, 2, 0, 0, 0, 36, 
                    0, 0, 82, 83, 65, 49, 0, 4, 0, 0, 1, 0, 1, 0, 237, 146, 145, 51, 34, 
                    97, 123, 196, 90, 174, 41, 170, 173, 221, 41, 193, 175, 39, 7, 151, 
                    178, 0, 230, 152, 218, 8, 206, 206, 170, 84, 111, 145, 26, 208, 158, 
                    240, 246, 219, 228, 34, 31, 163, 11, 130, 16, 199, 111, 224, 4, 112, 
                    46, 84, 0, 104, 229, 38, 39, 63, 53, 189, 0, 157, 32, 38, 34, 109, 0, 
                    171, 114, 244, 34, 59, 9, 232, 150, 192, 247, 175, 104, 143, 171, 42, 
                    219, 66, 66, 194, 191, 218, 121, 59, 92, 42, 37, 158, 13, 108, 210, 
                    189, 9, 203, 204, 32, 48, 91, 212, 101, 193, 19, 227, 107, 25, 133, 
                    70, 2, 220, 83, 206, 71, 102, 245, 104, 252, 87, 109, 190, 56, 34, 180 };

                // Specify the version of the calling assembly.
                Version v1 = new Version("1.0.0.0");
                StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob(b1);
                Console.WriteLine(ComparePublicKeys() ? "Calling assembly has same key as this assembly " : "Calling assembly has different key than this assembly");
                // Create different permissions to exercise the set operations.
                StrongNameIdentityPermission snPerm = new StrongNameIdentityPermission(blob, "StrongNamedExe", v1);
                snPerm.Demand();
                // Return the location of the Windows directory that is found in 
                // the windir environment variable.
                Console.WriteLine(Environment.GetEnvironmentVariable("windir"));
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception thrown in called assembly: " + e.Message);
            }
        }
    // Use an attribute to demand that the calling assembly has a specific strong name key.
    // Use Sn.exe to generate the public key string used for the demand.
    [StrongNameIdentityPermissionAttribute(SecurityAction.Demand, PublicKey = 
        "0024000004800000940000000602000000240000525341310004000001000100ed92913322617b" +
        "c45aae29aaaddd29c1af270797b200e698da08ceceaa546f911ad09ef0f6dbe4221fa30b8210c7" +
        "6fe004702e540068e526273f35bd009d2026226d00ab72f4223b09e896c0f7af688fab2adb4242" +
        "c2bfda793b5c2a259e0d6cd2bd09cbcc20305bd465c113e36b19854602dc53ce4766f568fc576d" +
        "be3822b4")]
        public void GetWindirDeclarative()
        {
            try
            {
                // Return the location of the Windows directory that is found in 
                // the windir environment variable.
                Console.WriteLine(Environment.GetEnvironmentVariable("windir"));
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception thrown in called assembly: " + e.Message);
            }
        }
        public static bool ComparePublicKeys()
        {
            try
            {
                Assembly callingAssembly;

                // Create a target object.
                Int32 integer1 = new Int32();
                Type type1;

                // Set the Type instance to the target class type.
                type1 = integer1.GetType();

                // Create an instance of the assembly class to house the Integer type.  
                callingAssembly = Assembly.GetAssembly(integer1.GetType());

                // Display the name of the calling assembly.
                Assembly entryAssembly = Assembly.GetEntryAssembly();
                string mainAssembly = entryAssembly.FullName;

                Console.WriteLine("Calling assembly = " + entryAssembly.FullName);

                // Get the name of the assembly being called (this assembly).
                string thisAssembly = Assembly.GetCallingAssembly().FullName;

                Console.WriteLine("Called assembly=" + thisAssembly);

                int tokenIndex1 = thisAssembly.LastIndexOf("PublicKeyToken");
                int tokenIndex2 = mainAssembly.LastIndexOf("PublicKeyToken");
                string testString1 = thisAssembly.Substring(tokenIndex1, 31);
                string testString2 = mainAssembly.Substring(tokenIndex2, 31);

                return testString1.Equals(testString2);
            }
            catch
            {
                Console.WriteLine("This is an unexpected exception");
                throw;
            }
        }
    }
}
//The following commented code should be compiled as an console application to execute the
// class library example.
//
//#using <mscorlib.dll>
//using namespace System;
//using namespace System::Reflection;
//using namespace SignedLib;
//[assembly: AssemblyVersion(S"1.0.0.0")]
//[assembly: AssemblyKeyFile(S"snKey.snk")];
//    // Demonstrate the declarative and imperative forms of the StrongNameIdentityPermission.
//int main()
//{
//    try
//    {
//        Signed* signedLib = new Signed();
//        signedLib->GetWindirImperative();
//        signedLib->GetWindirDeclarative();
//        Console::WriteLine( S"Called the signed library assembly methods successfully.");
//    }
//    catch (Exception* e)
//    {
//        Console::WriteLine( S"Exception thrown in called assembly: {0}", e->Message);
//    }
//}
//
// Class library example to demonstrate StrongNameIdentityPermission and 
// StrongNameIdentityPermissionAttribute.
using namespace System;
using namespace System::Security::Permissions;
using namespace System::Reflection;

[assembly:AssemblyVersion("1.0.*")];
[assembly:AssemblyKeyFile("snKey.snk")];
namespace SignedLib
{
   public ref class Signed
   {
   public:

      // Read the windir environment variable.
      void GetWindirImperative()
      {
         try
         {
            
            // Use Sn.exe to generate the byte array for the public key.
            array<Byte>^b1 = {0,36,0,0,4,128,0,0,148,0,0,0,6,2,0,0,0,36,0,0,82,83,65,49,0,4,0,0,1,0,1,0,237,146,145,51,34,97,123,196,90,174,41,170,173,221,41,193,175,39,7,151,178,0,230,152,218,8,206,206,170,84,111,145,26,208,158,240,246,219,228,34,31,163,11,130,16,199,111,224,4,112,46,84,0,104,229,38,39,63,53,189,0,157,32,38,34,109,0,171,114,244,34,59,9,232,150,192,247,175,104,143,171,42,219,66,66,194,191,218,121,59,92,42,37,158,13,108,210,189,9,203,204,32,48,91,212,101,193,19,227,107,25,133,70,2,220,83,206,71,102,245,104,252,87,109,190,56,34,180};
            
            // Specify the version of the calling assembly.
            Version^ v1 = gcnew Version( "1.0.0.0" );
            StrongNamePublicKeyBlob^ blob = gcnew StrongNamePublicKeyBlob( b1 );
            Console::WriteLine( ComparePublicKeys() ? "Calling assembly has same key as this assembly " : "Calling assembly has different key than this assembly" );
            
            // Create different permissions to exercise the set operations.
            StrongNameIdentityPermission^ snPerm = gcnew StrongNameIdentityPermission( blob,"StrongNamedExe",v1 );
            snPerm->Demand();
            
            // Return the location of the Windows directory that is found in 
            // the windir environment variable.
            Console::WriteLine( Environment::GetEnvironmentVariable( "windir" ) );
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( "Exception thrown in called assembly: {0}", e->Message );
         }

      }


      // Use an attribute to demand that the calling assembly has a specific strong name key.
      // Use Sn.exe to generate the public key string used for the demand.

      [StrongNameIdentityPermissionAttribute(SecurityAction::Demand,PublicKey=
      "0024000004800000940000000602000000240000525341310004000001000100ed92913322617b"
      "c45aae29aaaddd29c1af270797b200e698da08ceceaa546f911ad09ef0f6dbe4221fa30b8210c7"
      "activatede004702e540068e526273f35bd009d2026226d00ab72f4223b09e896c0f7af688fab2adb4242"
      "c2bfda793b5c2a259e0d6cd2bd09cbcc20305bd465c113e36b19854602dc53ce4766f568fc576d"
      "be3822b4")]
      void GetWindirDeclarative()
      {
         try
         {
            
            // Return the location of the Windows directory that is found in 
            // the windir environment variable.
            Console::WriteLine( Environment::GetEnvironmentVariable( "windir" ) );
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( "Exception thrown in called assembly: {0}", e->Message );
         }

      }

      static bool ComparePublicKeys()
      {
         try
         {
            Assembly^ callingAssembly;
            
            // Create a target object.
            Int32 integer1 = Int32(  );
            Type^ type1;
            
            // Set the Type instance to the target class type.
            type1 = integer1.GetType();
            
            // Create an instance of the assembly class to house the Integer type.  
            callingAssembly = Assembly::GetAssembly( integer1.GetType() );
            
            // Display the name of the calling assembly.
            Assembly^ entryAssembly = Assembly::GetEntryAssembly();
            String^ mainAssembly = entryAssembly->FullName;
            Console::WriteLine( "Calling assembly = {0}", entryAssembly->FullName );
            
            // Get the name of the assembly being called (this assembly).
            String^ thisAssembly = Assembly::GetCallingAssembly()->FullName;
            Console::WriteLine( "Called assembly={0}", thisAssembly );
            int tokenIndex1 = thisAssembly->LastIndexOf( "PublicKeyToken" );
            int tokenIndex2 = mainAssembly->LastIndexOf( "PublicKeyToken" );
            String^ testString1 = thisAssembly->Substring( tokenIndex1, 31 );
            String^ testString2 = mainAssembly->Substring( tokenIndex2, 31 );
            return testString1->Equals( testString2 );
         }
         catch ( Exception^ ) 
         {
            Console::WriteLine( "This is an unexpected exception" );
            throw;
         }

      }

   };

}
package SignedLib ; 

//  The following commented code should be compiled as an console application 
//  to execute the class library example.

//    import System .* ;
//    import System.Reflection .* ;
//    import SignedLib .* ;
//    /** @assembly AssemblyVersion("1.0.0.0")
//     */
//    /** @assembly AssemblyKeyFile("snKey.snk")
//     */
//    public class StrongNameTest
//    {
   
//        //Demonstrate the declarative and imperative forms of the 
//        // StrongNameIdentityPermission.
//        public static void main(String[] args)
//        {
//            try {
//                Signed signedLib =  new Signed();
//                signedLib.GetWindirImperative();
//                signedLib.GetWindirDeclarative();
//                Console.WriteLine(("Called the signed library assembly " 
//                    + "methods successfully."));
//            }
//            catch(System.Exception e) {
//                Console.WriteLine(("Exception thrown in called assembly: " 
//                    + e.get_Message()));
//            }
//        } //main
//    } //StrongNameTest

// Class library example to demonstrate StrongNameIdentityPermission and 
// StrongNameIdentityPermissionAttribute.

import System.*;
import System.Security.Permissions.*;
import System.Reflection.*;

/** @assembly AssemblyVersion("1.0.*")
 */
/** @assembly AssemblyKeyFile("snKey.snk")
 */
public class Signed
{
    // Read the windir environment variable.
    public void GetWindirImperative()
    {
        try {
            // Use Sn.exe to generate the byte array for the public key.
            ubyte b1[] =  { 0, 36, 0, 0, 4, 128, 0, 0, 148, 0, 0, 0, 6, 2, 
                0, 0, 0, 36, 0, 0, 82, 83, 65, 49, 0, 4, 0, 0, 1, 0, 1, 0,
                237, 146, 145, 51, 34, 97, 123, 196, 90, 174, 41, 170, 173,
                221, 41, 193, 175, 39, 7, 151, 178, 0, 230, 152, 218, 8, 
                206, 206, 170, 84, 111, 145, 26, 208, 158, 240, 246, 219,
                228, 34, 31, 163, 11, 130, 16, 199, 111, 224, 4, 112, 46,
                84, 0, 104, 229, 38, 39, 63, 53, 189, 0, 157, 32, 38, 34,
                109, 0, 171, 114, 244, 34, 59, 9, 232, 150, 192, 247, 175,
                104, 143, 171, 42, 219, 66, 66, 194, 191, 218, 121, 59, 92,
                42, 37, 158, 13, 108, 210, 189, 9, 203, 204, 32, 48, 91, 
                212, 101, 193, 19, 227, 107, 25, 133, 70, 2, 220, 83, 206,
                71, 102, 245, 104, 252, 87, 109, 190, 56, 34, 180};

            // Specify the version of the calling assembly.
            Version v1 = new Version("1.0.0.0");
            StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob(b1);

            Console.WriteLine((ComparePublicKeys()) ? "Calling assembly " 
                + "has same key as this assembly " : "Calling assembly has " 
                + "different key than this assembly");

            // Create different permissions to exercise the set operations.
            StrongNameIdentityPermission snPerm = 
                new StrongNameIdentityPermission(blob, "StrongNamedExe", v1);

            snPerm.Demand();

            // Return the location of the Windows directory that is found in 
            // the windir environment variable.
            Console.WriteLine(Environment.GetEnvironmentVariable("windir"));
        }
        catch (System.Exception e) {
            Console.WriteLine(("Exception thrown in called assembly: " 
                + e.get_Message()));
        }
    } //GetWindirImperative

    // Use an attribute to demand that the calling assembly has a 
    // specific strong name key.
    // Use Sn.exe to generate the public key string used for the demand.
    /** @attribute StrongNameIdentityPermissionAttribute(
        SecurityAction.Demand, PublicKey = 
        "0024000004800000940000000602000000240000525341310004000001000100ed" + 
        "92913322617b" + "c45aae29aaaddd29c1af270797b200e698da08ceceaa546f" + 
        "911ad09ef0f6dbe4221fa30b8210c7" + "6fe004702e540068e526273f35bd009d" + 
        "2026226d00ab72f4223b09e896c0f7af688fab2adb4242" + "c2bfda793b5c2a259" + 
        "e0d6cd2bd09cbcc20305bd465c113e36b19854602dc53ce4766f568fc576d" + 
        "be3822b4")
     */

    public void GetWindirDeclarative()
    {
        try {
            // Return the location of the Windows directory that is found in 
            // the windir environment variable.
            Console.WriteLine(Environment.GetEnvironmentVariable("windir"));
        }
        catch (System.Exception e) {
            Console.WriteLine(("Exception thrown in called assembly: " 
                + e.get_Message()));
        }
    } //GetWindirDeclarative

    public static boolean ComparePublicKeys() throws Exception
    {
        try {
            Assembly callingAssembly;

            // Create a target object.
            Int32 integer1 = new Int32();
            Type type1;

            // Set the Type instance to the target class type.
            type1 = integer1.GetType();

            // Create an instance of the assembly class to house the Integer 
            // type.  
            callingAssembly = Assembly.GetAssembly(integer1.GetType());

            // Display the name of the calling assembly.
            Assembly entryAssembly = Assembly.GetEntryAssembly();
            String mainAssembly = entryAssembly.get_FullName();

            Console.WriteLine(("Calling assembly = " 
                + entryAssembly.get_FullName()));

            // Get the name of the assembly being called (this assembly).
            String thisAssembly = Assembly.GetCallingAssembly().
                get_FullName();

            Console.WriteLine(("Called assembly=" + thisAssembly));

            int tokenIndex1 = thisAssembly.LastIndexOf("PublicKeyToken");
            int tokenIndex2 = mainAssembly.LastIndexOf("PublicKeyToken");
            String testString1 = thisAssembly.Substring(tokenIndex1, 31);
            String testString2 = mainAssembly.Substring(tokenIndex2, 31);

            return testString1.Equals(testString2);
        }
        catch (System.Exception exp) {
            Console.WriteLine("This is an unexpected exception");
            throw new Exception();
        }
    } //ComparePublicKeys
} //Signed

下面的代码示例演示 StrongNameIdentityPermission 方法的行为。此示例的目的是显示方法的结果,而不是显示如何使用这些方法。

Imports System
Imports System.Security
Imports System.Security.Permissions




Public Class StrongNameIdentityDemo
    ' Public key
    Private Shared b1 As Byte() =  {0, 36, 0, 0, 4, 128, 0, 0, 148, 0, 0, 0, 6, 2, 0, 0, 0, 36, 0, 0, 82, 83, 65, 49, 0, 4, 0, 0, 1, 0, 1, 0, 237, 146, 145, 51, 34, 97, 123, 196, 90, 174, 41, 170, 173, 221, 41, 193, 175, 39, 7, 151, 178, 0, 230, 152, 218, 8, 206, 206, 170, 84, 111, 145, 26, 208, 158, 240, 246, 219, 228, 34, 31, 163, 11, 130, 16, 199, 111, 224, 4, 112, 46, 84, 0, 104, 229, 38, 39, 63, 53, 189, 0, 157, 32, 38, 34, 109, 0, 171, 114, 244, 34, 59, 9, 232, 150, 192, 247, 175, 104, 143, 171, 42, 219, 66, 66, 194, 191, 218, 121, 59, 92, 42, 37, 158, 13, 108, 210, 189, 9, 203, 204, 32, 48, 91, 212, 101, 193, 19, 227, 107, 25, 133, 70, 2, 220, 83, 206, 71, 102, 245, 104, 252, 87, 109, 190, 56, 34, 180}
    
    Private blob As New StrongNamePublicKeyBlob(b1)
    ' Use this version number.
    Private v1 As New Version("1.0.0.0")
    
    ' IsSubsetOf determines whether the current permission is a subset of the specified permission.
    Private Function IsSubsetOfDemo() As Boolean 
        
        Dim returnValue As Boolean = True
        
        Dim snIdPerm1, snIdPerm2 As StrongNameIdentityPermission
        
        snIdPerm1 = New StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", New Version("1.0.0.0"))
        snIdPerm2 = New StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", New Version("1.0.0.0"))
        
        If snIdPerm1.IsSubsetOf(snIdPerm2) Then
            
            Console.WriteLine("MyCompany.MyDepartment.* is a subset " + "of MyCompany.MyDepartment.MyFile " + vbLf)
        Else
            Console.WriteLine("MyCompany.MyDepartment.*" + " is not a subset of MyCompany.MyDepartment.MyFile " + vbLf)
        End If
        
        Return returnValue
    
    End Function 'IsSubsetOfDemo
    
    ' Union creates a new permission that is the union of the current permission and the specified permission.
    Private Function UnionDemo() As Boolean 
        
        Dim returnValue As Boolean = True
        
        Dim snIdPerm1, snIdPerm2 As StrongNameIdentityPermission
        Dim snIdPerm3 As IPermission
        
        snIdPerm1 = New StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", New Version("1.0.0.0"))
        snIdPerm2 = New StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", New Version("1.0.0.0"))
        
        snIdPerm3 = CType(snIdPerm1.Union(snIdPerm2), StrongNameIdentityPermission)
        
        Try
            Console.WriteLine("The union of MyCompany.MyDepartment.*" + "and MyCompany.MyDepartment.MyFile is " + CType(snIdPerm3, StrongNameIdentityPermission).Name.ToString())
        Catch e As Exception
            Console.WriteLine("An expected exception was thrown: " + e.Message)
        End Try
        
        
        Return returnValue
    
    End Function 'UnionDemo
     
    ' Intersect creates and returns a new permission that is the intersection of the current
    ' permission and the permission specified.
    Private Function IntersectDemo() As Boolean 
        
        Dim returnValue As Boolean = True
        
        Dim snIdPerm1, snIdPerm2, snIdPerm3 As StrongNameIdentityPermission
        
        snIdPerm1 = New StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", New Version("1.0.0.0"))
        snIdPerm2 = New StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", New Version("1.0.0.0"))
        
        Try
            
            snIdPerm3 = CType(snIdPerm1.Intersect(snIdPerm2), StrongNameIdentityPermission)
            
            Console.WriteLine("The intersection of MyCompany.MyDepartment.*" + "MyCompany.MyDepartment.MyFile is " + CType(snIdPerm3, StrongNameIdentityPermission).Name.ToString())
        
        Catch e As Exception
            Console.WriteLine("An exception was thrown: " + e.ToString())
            returnValue = False
        End Try
        
        Return returnValue
    
    End Function 'IntersectDemo
     
    'Copy creates and returns an identical copy of the current permission.
    Private Function CopyDemo() As Boolean 
        Dim returnValue As Boolean = True
        
        Dim snIdPerm1, snIdPerm2 As StrongNameIdentityPermission
        
        snIdPerm1 = New StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", New Version("1.0.0.0"))
        snIdPerm2 = New StrongNameIdentityPermission(PermissionState.None)
        snIdPerm2 = CType(snIdPerm1.Copy(), StrongNameIdentityPermission)
        Console.WriteLine("Result of copy = " + snIdPerm2.ToString() + vbLf)
        
        Return returnValue
    
    End Function 'CopyDemo
    
    ' ToXml creates an XML encoding of the permission and its current state;
    'FromXml reconstructs a permission with the specified state from the XML encoding.
    Private Function ToFromXmlDemo() As Boolean 
        
        Dim returnValue As Boolean = True
        
        Dim snIdPerm1, snIdPerm2 As StrongNameIdentityPermission
        
        snIdPerm1 = New StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", New Version("1.0.0.0"))
        snIdPerm2 = New StrongNameIdentityPermission(PermissionState.None)
        snIdPerm2.FromXml(snIdPerm1.ToXml())
        Console.WriteLine("Result of ToFromXml = " + snIdPerm2.ToString() + vbLf)
        
        Return returnValue
    
    End Function 'ToFromXmlDemo
     
    ' Invoke all demos.
    Public Function runDemo() As Boolean

        Dim ret As Boolean = True
        Dim retTmp As Boolean
        ' Call the IsSubsetOf demo.
        retTmp = IsSubsetOfDemo()
        If retTmp Then
            Console.Out.WriteLine("IsSubsetOf demo completed successfully.")
        Else
            Console.Out.WriteLine("IsSubsetOf demo failed.")
        End If
        ret = retTmp AndAlso ret

        ' Call the Union demo.
        retTmp = UnionDemo()
        If retTmp Then
            Console.Out.WriteLine("Union demo completed successfully.")
        Else
            Console.Out.WriteLine("Union demo failed.")
        End If
        ret = retTmp AndAlso ret

        ' Call the Intersect demo.
        retTmp = IntersectDemo()
        If retTmp Then
            Console.Out.WriteLine("Intersect demo completed successfully.")
        Else
            Console.Out.WriteLine("Intersect demo failed.")
        End If
        ret = retTmp AndAlso ret


        ' Call the Copy demo.
        retTmp = CopyDemo()
        If retTmp Then
            Console.Out.WriteLine("Copy demo completed successfully")
        Else
            Console.Out.WriteLine("Copy demo failed.")
        End If
        ret = retTmp AndAlso ret

        ' Call the ToFromXml demo.  
        retTmp = ToFromXmlDemo()
        If retTmp Then
            Console.Out.WriteLine("ToFromXml demo completed successfully")
        Else
            Console.Out.WriteLine("ToFromXml demo failed.")
        End If
        ret = retTmp AndAlso ret

        Console.WriteLine("********************************************************" + ControlChars.Lf)


        Return ret
    End Function 'runDemo


    ' Test harness.
    Public Overloads Shared Sub Main(ByVal args() As [String])
        Try
            Dim democase As New StrongNameIdentityDemo()
            Dim ret As Boolean = democase.runDemo()
            If ret Then
                Console.Out.WriteLine("StrongNameIdentity demo completed successfully.")
                Console.Out.WriteLine("Press the Enter key to exit.")
                Dim consoleInput As String = Console.ReadLine()
                System.Environment.ExitCode = 100
            Else
                Console.Out.WriteLine("StrongNameIdentity demo failed.")
                Console.Out.WriteLine("Press the Enter key to exit.")
                Dim consoleInput As String = Console.ReadLine()
                System.Environment.ExitCode = 101
            End If
        Catch e As Exception
            Console.Out.WriteLine("StrongNameIdentity demo failed.")
            Console.WriteLine(e.ToString())
            Console.Out.WriteLine("Press the Enter key to exit.")
            Dim consoleInput As String = Console.ReadLine()
            System.Environment.ExitCode = 101
        End Try
    End Sub 'Main
End Class 'StrongNameIdentityDemo
using System;
using System.Security;
using System.Security.Permissions;


public class StrongNameIdentityDemo
{
    // Public key
    static byte[] b1 = { 0, 36, 0, 0, 4, 128, 0, 0, 148, 0, 0, 0, 6, 2, 0, 0, 0, 36, 0, 0,
82, 83, 65, 49, 0, 4, 0, 0, 1, 0, 1, 0, 237, 146, 145, 51, 34,
97, 123, 196, 90, 174, 41, 170, 173, 221, 41, 193, 175, 39, 7,
151, 178, 0, 230, 152, 218, 8, 206, 206, 170,84, 111, 145, 26,
208, 158, 240, 246, 219, 228, 34, 31, 163, 11, 130, 16, 199, 111,
224, 4, 112, 46, 84, 0, 104, 229, 38, 39, 63, 53, 189, 0, 157,
32, 38, 34, 109, 0, 171, 114, 244, 34, 59, 9, 232, 150, 192, 247,
175, 104, 143, 171, 42, 219, 66, 66, 194, 191, 218, 121, 59, 92,
42, 37, 158, 13, 108, 210, 189, 9, 203, 204, 32, 48, 91, 212, 101,
193, 19, 227, 107, 25, 133, 70, 2, 220, 83, 206, 71, 102, 245, 104,
252, 87, 109, 190, 56, 34, 180};

    StrongNamePublicKeyBlob blob = new StrongNamePublicKeyBlob(b1);
    // Use this version number.
    Version v1 = new Version("1.0.0.0");
    // IsSubsetOf determines whether the current permission is a subset of the specified permission.
    private bool IsSubsetOfDemo()
    {

        bool returnValue = true;

        StrongNameIdentityPermission snIdPerm1, snIdPerm2;

        snIdPerm1 = new StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", new Version("1.0.0.0"));
        snIdPerm2 = new StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", new Version("1.0.0.0"));

        if (snIdPerm1.IsSubsetOf(snIdPerm2))
        {

            Console.WriteLine("MyCompany.MyDepartment.* is a subset " +
            "of MyCompany.MyDepartment.MyFile \n");
        }
        else
        {
            Console.WriteLine("MyCompany.MyDepartment.*" +
            " is not a subset of MyCompany.MyDepartment.MyFile \n");
        }

        return returnValue;
    }
    // Union creates a new permission that is the union of the current permission and the specified permission.
    private bool UnionDemo()
    {

        bool returnValue = true;

        StrongNameIdentityPermission snIdPerm1, snIdPerm2;
        IPermission snIdPerm3;

        snIdPerm1 = new StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", new Version("1.0.0.0"));
        snIdPerm2 = new StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", new Version("1.0.0.0"));

        snIdPerm3 = (StrongNameIdentityPermission)snIdPerm1.Union(snIdPerm2);

        try
        {
            Console.WriteLine("The union of MyCompany.MyDepartment.*" +
            "and MyCompany.MyDepartment.MyFile is " +
            ((StrongNameIdentityPermission)snIdPerm3).Name.ToString());
        }
        catch (Exception e)
        {
            Console.WriteLine("An expected exception was thrown: " + e.Message);
        }


        return returnValue;

    }
    // Intersect creates and returns a new permission that is the intersection of the current
    // permission and the permission specified.
    private bool IntersectDemo()
    {

        bool returnValue = true;

        StrongNameIdentityPermission snIdPerm1, snIdPerm2, snIdPerm3;

        snIdPerm1 = new StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", new Version("1.0.0.0"));
        snIdPerm2 = new StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", new Version("1.0.0.0"));

        try
        {

            snIdPerm3 = (StrongNameIdentityPermission)snIdPerm1.Intersect(snIdPerm2);

            Console.WriteLine("The intersection of MyCompany.MyDepartment.*"
            + "MyCompany.MyDepartment.MyFile is "
            + ((StrongNameIdentityPermission)snIdPerm3).Name.ToString());

        }
        catch (Exception e)
        {
            Console.WriteLine("An exception was thrown: " + e);
            returnValue = false;
        }

        return returnValue;

    }
    //Copy creates and returns an identical copy of the current permission.
    private bool CopyDemo()
    {
        bool returnValue = true;

        StrongNameIdentityPermission snIdPerm1, snIdPerm2;

        snIdPerm1 = new StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", new Version("1.0.0.0"));
        snIdPerm2 = new StrongNameIdentityPermission(PermissionState.None);

        snIdPerm2 = (StrongNameIdentityPermission)snIdPerm1.Copy();
        Console.WriteLine("Result of copy = " + snIdPerm2.ToString() + "\n");

        return returnValue;
    }
    // ToXml creates an XML encoding of the permission and its current state;
    //FromXml reconstructs a permission with the specified state from the XML encoding.
    private bool ToFromXmlDemo()
    {

        bool returnValue = true;

        StrongNameIdentityPermission snIdPerm1, snIdPerm2;

        snIdPerm1 = new StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", new Version("1.0.0.0"));    
        snIdPerm2 = new StrongNameIdentityPermission(PermissionState.None);
        snIdPerm2.FromXml(snIdPerm1.ToXml());
        Console.WriteLine("Result of ToFromXml = " + snIdPerm2.ToString() + "\n");

        return returnValue;

    }
    // Invoke all demos.
    public bool RunDemo()
    {

        bool ret = true;
        bool retTmp;
        // Call the IsSubsetOf demo.
        if (retTmp = IsSubsetOfDemo()) Console.Out.WriteLine("IsSubsetOf demo completed successfully.");
        else
            Console.Out.WriteLine("IsSubsetOf demo failed.");
        ret = retTmp && ret;

        // Call the Union demo.
        if (retTmp = UnionDemo()) Console.Out.WriteLine("Union demo completed successfully.");
        else
            Console.Out.WriteLine("Union demo failed.");
        ret = retTmp && ret;

        // Call the Intersect demo.
        if (retTmp = IntersectDemo()) Console.Out.WriteLine("Intersect demo completed successfully.");
        else
            Console.Out.WriteLine("Intersect demo failed.");
        ret = retTmp && ret;


        // Call the Copy demo.
        if (retTmp = CopyDemo()) Console.Out.WriteLine("Copy demo completed successfully");
        else
            Console.Out.WriteLine("Copy demo failed.");
        ret = retTmp && ret;

        // Call the ToFromXml demo.
        if (retTmp = ToFromXmlDemo()) Console.Out.WriteLine("ToFromXml demo completed successfully");
        else
            Console.Out.WriteLine("ToFromXml demo failed.");
        ret = retTmp && ret;

        Console.WriteLine("********************************************************\n");


        return (ret);






    }
    // Test harness.
    public static void Main(String[] args)
    {
        try
        {
            StrongNameIdentityDemo democase = new StrongNameIdentityDemo();
            bool ret = democase.RunDemo();
            if (ret)
            {
                Console.Out.WriteLine("StrongNameIdentity demo completed successfully.");
                Console.Out.WriteLine("Press the Enter key to exit.");
                string consoleInput = Console.ReadLine();
                System.Environment.ExitCode = 100;
            }
            else
            {
                Console.Out.WriteLine("StrongNameIdentity demo failed.");
                Console.Out.WriteLine("Press the Enter key to exit.");
                string consoleInput = Console.ReadLine();
                System.Environment.ExitCode = 101;
            }
        }
        catch (Exception e)
        {
            Console.Out.WriteLine("StrongNameIdentity demo failed.");
            Console.WriteLine(e.ToString());
            Console.Out.WriteLine("Press the Enter key to exit.");
            string consoleInput = Console.ReadLine();
            System.Environment.ExitCode = 101;
        }
        // Catch non-CLSCompliant exceptions.
        catch
        {
            Console.WriteLine("An unexpected non-CLSCompliant exception was thrown.");
        }
    }
}
using namespace System;
using namespace System::Security;
using namespace System::Security::Permissions;
using namespace System::Runtime::InteropServices;

// This class generates StrongNameIdentityPermission objects.

[assembly:CLSCompliant(true)];

public ref class StrongNameIdentityDemo
{
private:
    // Public key
    static array<Byte>^b1 = {0,36,0,0,4,128,0,0,148,0,0,0,6,2,0,0,0,36,0,0,82,83,65,49,0,4,0,0,1,0,1,0,237,146,145,51,34,97,123,196,90,174,41,170,173,221,41,193,175,39,7,151,178,0,230,152,218,8,206,206,170,84,111,145,26,208,158,240,246,219,228,34,31,163,11,130,16,199,111,224,4,112,46,84,0,104,229,38,39,63,53,189,0,157,32,38,34,109,0,171,114,244,34,59,9,232,150,192,247,175,104,143,171,42,219,66,66,194,191,218,121,59,92,42,37,158,13,108,210,189,9,203,204,32,48,91,212,101,193,19,227,107,25,133,70,2,220,83,206,71,102,245,104,252,87,109,190,56,34,180};
    static StrongNamePublicKeyBlob^ blob = gcnew StrongNamePublicKeyBlob( b1 );

    // Use this version number.
    static Version^ v1 = gcnew Version( "1.0.0.0" );

    // IsSubsetOf determines whether the current permission is a subset of the specified permission.
    bool IsSubsetOfDemo()
    {
        bool returnValue = true;

        StrongNameIdentityPermission^ snIdPerm1;
        StrongNameIdentityPermission^ snIdPerm2;

        snIdPerm1 = gcnew StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", gcnew Version("1.0.0.0"));
        snIdPerm2 = gcnew StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", gcnew Version("1.0.0.0"));

        if (snIdPerm1->IsSubsetOf(snIdPerm2))
        {

            Console::WriteLine("MyCompany.MyDepartment.* is a subset " +
                "of MyCompany.MyDepartment.MyFile \n");
        }
        else
        {
            Console::WriteLine("MyCompany.MyDepartment.*" +
                " is not a subset of MyCompany.MyDepartment.MyFile \n");
        }

        return returnValue;
    }


    // Union creates a new permission that is the union of the current permission and the specified permission.
    bool UnionDemo()
    {
        bool returnValue = true;
        StrongNameIdentityPermission^ snIdPerm1;
        StrongNameIdentityPermission^ snIdPerm2;
        IPermission^ snIdPerm3;
        snIdPerm1 = gcnew StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", gcnew Version("1.0.0.0"));
        snIdPerm2 = gcnew StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", gcnew Version("1.0.0.0"));
        snIdPerm3 = dynamic_cast<StrongNameIdentityPermission^>(snIdPerm1->Union( snIdPerm2 ));
        snIdPerm3 = snIdPerm1->Union( snIdPerm2 );

        try
        {
            Console::WriteLine("The union of MyCompany.MyDepartment.*" +
                "and MyCompany.MyDepartment.MyFile is " +
                (dynamic_cast<StrongNameIdentityPermission^>(snIdPerm3))->Name); 
        }
        catch (Exception^ e)
        {
            Console::WriteLine("An expected exception was thrown: " + e->Message);
        }


        return returnValue;
    }


    // Intersect creates and returns a new permission that is the intersection of the current
    // permission and the permission specified.
    bool IntersectDemo()
    {
        bool returnValue = true;
        StrongNameIdentityPermission^ snIdPerm1;
        StrongNameIdentityPermission^ snIdPerm2;
        StrongNameIdentityPermission^ snIdPerm3;
        snIdPerm1 = gcnew StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", gcnew Version("1.0.0.0"));
        snIdPerm2 = gcnew StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.MyFile", gcnew Version("1.0.0.0"));

        try
        {

            snIdPerm3 = dynamic_cast<StrongNameIdentityPermission^>(snIdPerm1->Intersect(snIdPerm2));

            Console::WriteLine("The intersection of MyCompany.MyDepartment.*" +
                "and MyCompany.MyDepartment.MyFile is " +
                (dynamic_cast<StrongNameIdentityPermission^>(snIdPerm3))->Name);
        }
        catch (Exception^ e)
        {
            Console::WriteLine("An exception was thrown: " + e);
            returnValue = false;
        }

        return returnValue;

    }


    //Copy creates and returns an identical copy of the current permission.
    bool CopyDemo()
    {
        bool returnValue = true;
        StrongNameIdentityPermission^ snIdPerm1;
        StrongNameIdentityPermission^ snIdPerm2;
        snIdPerm1 = gcnew StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", gcnew Version("1.0.0.0"));
        snIdPerm2 = gcnew StrongNameIdentityPermission(PermissionState::None);

        snIdPerm2 = dynamic_cast<StrongNameIdentityPermission^>(snIdPerm1->Copy());
        Console::WriteLine("Result of copy = " + snIdPerm2->ToString() + "\n");

        return returnValue;
    }


    // ToXml creates an XML encoding of the permission and its current state;
    //FromXml reconstructs a permission with the specified state from the XML encoding.
    bool ToFromXmlDemo()
    {
        bool returnValue = true;
        StrongNameIdentityPermission^ snIdPerm1;
        StrongNameIdentityPermission^ snIdPerm2;
        snIdPerm1 = gcnew StrongNameIdentityPermission(blob, "MyCompany.MyDepartment.*", gcnew Version("1.0.0.0"));    
        snIdPerm2 = gcnew StrongNameIdentityPermission(PermissionState::None);
        snIdPerm2->FromXml(snIdPerm1->ToXml());
        Console::WriteLine("Result of ToFromXml = " + snIdPerm2->ToString() + "\n");

        return returnValue;
    }


public:

    // Invoke all demos.
    bool RunDemo()
    {
        bool ret = true;
        bool retTmp;

        // Call the IsSubsetOf demo.
        if ( retTmp = IsSubsetOfDemo() )
            Console::WriteLine( "IsSubsetOf demo completed successfully." );
        else
            Console::WriteLine( "IsSubsetOf demo failed." );

        ret = retTmp && ret;

        // Call the Union demo.
        if ( retTmp = UnionDemo() )
            Console::WriteLine( "Union demo completed successfully." );
        else
            Console::WriteLine( "Union demo failed." );

        ret = retTmp && ret;

        // Call the Intersect demo.
        if ( retTmp = IntersectDemo() )
            Console::WriteLine( "Intersect demo completed successfully." );
        else
            Console::WriteLine( "Intersect demo failed." );

        ret = retTmp && ret;

        // Call the Copy demo.
        if ( retTmp = CopyDemo() )
            Console::WriteLine( "Copy demo completed successfully" );
        else
            Console::WriteLine( "Copy demo failed." );

        ret = retTmp && ret;

        // Call the ToFromXml demo.
        if ( retTmp = ToFromXmlDemo() )
            Console::WriteLine( "ToFromXml demo completed successfully" );
        else
            Console::WriteLine( "ToFromXml demo failed." );

        ret = retTmp && ret;
        Console::WriteLine( "********************************************************\n" );
        return (ret);
    }

};


// Test harness.
int main()
{
    try
    {
        StrongNameIdentityDemo^ democase = gcnew StrongNameIdentityDemo;
        bool ret = democase->RunDemo();
        if ( ret )
        {
            Console::WriteLine( "StrongNameIdentity demo completed successfully." );
            Console::WriteLine( "Press the Enter key to exit." );
            Console::ReadLine();
            System::Environment::ExitCode = 100;
        }
        else
        {
            Console::WriteLine( "StrongNameIdentity demo failed." );
            Console::WriteLine( "Press the Enter key to exit." );
            Console::ReadLine();
            System::Environment::ExitCode = 101;
        }
    }
    catch ( Exception^ e ) 
    {
        Console::WriteLine( "StrongNameIdentity demo failed." );
        Console::WriteLine( e );
        Console::WriteLine( "Press the Enter key to exit." );
        Console::ReadLine();
        System::Environment::ExitCode = 101;
    }

}

继承层次结构

System.Object
   System.Security.CodeAccessPermission
    System.Security.Permissions.StrongNameIdentityPermission

线程安全

此类型的任何公共静态(Visual Basic 中的 Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

StrongNameIdentityPermission 成员
System.Security.Permissions 命名空间
StrongNameIdentityPermission 类
StrongNamePublicKeyBlob
StrongName
StrongNameMembershipCondition

其他资源

安全权限
请求权限
具有强名称的程序集