程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 簽名有元程序集 Signed Friend Assemblies,signedassemblies

簽名有元程序集 Signed Friend Assemblies,signedassemblies

編輯:關於.NET

簽名有元程序集 Signed Friend Assemblies,signedassemblies


下面的例子演示了創建簽名程序集和有元程序集。這就要求兩個程序集都是強命名,在下面的例子中,兩個程序集都用了同一個秘鑰,也可以用不同的秘鑰。

1. 生成秘鑰, 這個在前面的博客中有說明,生成秘鑰文件sn.exe.

 

   得到了公鑰密碼,如圖

    

 

2. 創建C#文件,friend_signed_A。代碼應用InternalsVisibleToAttribute 聲明 friend_signed_B為有元程序集。這時要把公鑰加進代碼中。

using System.Text;
using System.Threading.Tasks;
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("friend_signed_B,PublicKey=0024000004800000940000000602000000240000525341310004000001000100d980f66fe7e3556e8f00bd78f66a96c9e67e12457b6e4473f7476ebaa380ba0186b8028f5734f21313b48715ab814f49fef36c155700bc87fac9a2b52b1e3d1f66f98a2a8f8583dfd0572f6743f391e1415295f599662ee5a7b184b6b020c89a5ad6ceacbbe7904aa919f1e26e2ed8059c86fd051e6a087cdfcf52af7db9b7a9")]

namespace friend_signed_A
{
    public class Class1
    {
       public void Test()
        {
            Console.WriteLine("Class1.Test");
            Console.ReadKey();
        }
    }
}

 

3. 編譯簽名程序集 friend_signed_A,csc /t:library /keyfile:FriendAssemblies.snk friend_signed_A.cs

 

 

4. 創建程序集 friend_signed_B,該程序集是friend_signed_A的有元程序集,所以它可以訪問friend_signed_A中internal類型的成員。並且它也需要要強命名的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using friend_signed_A;

namespace friend_signed_B
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 inst = new Class1();
            inst.Test();
        }
    }
}

5. 編譯並給friend_signed_B簽名。csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cs

 

6. 直接運行friend_signed_B.exe

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved