Visual Studio 2013
 

尽管本示例中的两种程序集使用了相同的密钥,但您可以对这两种程序集使用不同的密钥。

在 Visual Studio 中创建签名的程序集和友元程序集

  1. 打开 Visual Studio 命令提示。

  2. Sn.exe(强名称工具)。

    1. 生成此示例的强名称密钥,并将其存储在 FriendAssemblies.snk 文件中:

      sn -k FriendAssemblies.snk

    2. 从 FriendAssemblies.snk 文件中提取公钥,将其放入 FriendAssemblies.publickey 中:

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. 显示存储在 FriendAssemblies.publickey 文件中的公钥:

      sn -tp FriendAssemblies.publickey

  3. InternalsVisibleToAttribute 特性将 friend_signed_B 声明为友元程序集。

    因此,必须将以下代码中的公钥替换为刚生成的公钥,如下例所示。

     
    // friend_signed_A.cs
    // Compile with: 
    // csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs
    using System.Runtime.CompilerServices;
    
    [assembly: InternalsVisibleTo("friend_signed_B, PublicKey=0024000004800000940000000602000000240000525341310004000001000100e3aedce99b7e10823920206f8e46cd5558b4ec7345bd1a5b201ffe71660625dcb8f9a08687d881c8f65a0dcf042f81475d2e88f3e3e273c8311ee40f952db306c02fbfc5d8bc6ee1e924e6ec8fe8c01932e0648a0d3e5695134af3bb7fab370d3012d083fa6b83179dd3d031053f72fc1f7da8459140b0af5afc4d2804deccb6")]
    class Class1
    {
        public void Test()
        {
            System.Console.WriteLine("Class1.Test");
            System.Console.ReadLine();
        }
    }
    
    
    
  4. 使用以下命令编译 friend_signed_A 并为其签名。

     
    Vbc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.vb
    

     

     
    csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs
    
  5. 文件包含以下代码。

     
    // friend_signed_B.cs
    // Compile with: 
    // csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cs
    public class Program
    {
        static void Main()
        {
            Class1 inst = new Class1();
            inst.Test();
        }
    }
    
    
    
  6. 使用以下命令编译 friend_signed_B 并为其签名。

     
    Vbc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll friend_signed_B.vb
    

     

     
    csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cs
    

    /out 编译器选项显式设置该程序集。

    /out(C# 编译器选项)。

  7. 运行 friend_signed_B.exe 文件。

    程序将打印字符串“Class1.Test”。

internal (C#) 类型和成员的可见性。

相关文章:

  • 2022-12-23
  • 2021-08-08
  • 2022-01-31
  • 2021-11-18
  • 2021-12-12
  • 2021-10-14
猜你喜欢
  • 2021-12-29
  • 2021-09-03
  • 2021-05-30
  • 2022-12-23
  • 2022-01-28
  • 2021-07-13
相关资源
相似解决方案