如何:建立簽名的friend 組件(C# 和 Visual Basic)

來源:互聯網
上載者:User

標籤:

如何:建立簽名的friend 組件(C# 和 Visual Basic) Visual Studio 2013  

本樣本示範了如何將friend 組件和具有強式名稱的程式集一起使用。 這兩種程式集必須都使用強式名稱。 儘管本樣本中的兩種程式集使用了相同的密鑰,但您可以對這兩種程式集使用不同的密鑰。

在 Visual Studio 中建立簽名的程式集和friend 組件
  1. 開啟 Visual Studio 命令提示。

  2. 使用強式名稱工具,通過以下命令序列產生 keyfile 並顯示其公開金鑰。 有關更多資訊,請參見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. 建立一個名為 friend_signed_A 的 Visual Basic 或 C# 檔案,其中包含以下代碼。 該代碼使用 InternalsVisibleToAttribute 特性將 friend_signed_B 聲明為friend 組件。

    強式名稱工具在每次運行時產生新的公開金鑰。 因此,必須將以下代碼中的公開金鑰替換為剛產生的公開金鑰,如下例所示。

    C#VB 
    // friend_signed_A.cs// Compile with: // csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.csusing 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 並為其簽名。

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

     

    C# 
    csc /target:library /keyfile:FriendAssemblies.snk friend_signed_A.cs
  5. 建立一個名為 friend_signed_B 的 Visual Basic 或 C# 檔案,並包含以下代碼。 由於 friend_signed_A 將 friend_signed_B 指定為friend 組件,因此 friend_signed_B 中的代碼可以訪問 friend_signed_A 中的 Friend (Visual Basic) 或 internal (C#) 類型和成員。 檔案包含以下代碼。

    C#VB 
    // friend_signed_B.cs// Compile with: // csc /keyfile:FriendAssemblies.snk /r:friend_signed_A.dll /out:friend_signed_B.exe friend_signed_B.cspublic class Program{    static void Main()    {        Class1 inst = new Class1();        inst.Test();    }}
  6. 使用以下命令編譯 friend_signed_B 並為其簽名。

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

     

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

    編譯器產生的程式集的名稱必須與傳遞給 InternalsVisibleToAttribute 特性的friend 組件的名稱匹配。 可以使用 /out 編譯器選項顯式設定該程式集。

    在 C# 中,您必須使用 /out 編譯器選項顯式指定輸出程式集(.exe 或 .dll)的名稱。 在 Visual Basic 中,這是可選的。 有關更多資訊,請參見 /out (Visual Basic) 和 /out(C# 編譯器選項)。

  7. 運行 friend_signed_B.exe 檔。

    程式將列印字串“Class1.Test”。

安全性 

InternalsVisibleToAttribute 特性和 StrongNameIdentityPermission 類之間存在相似性。 主要的差異在於:StrongNameIdentityPermission 可以要求具有安全許可權才能運行特定的一段代碼,而 InternalsVisibleToAttribute 特性則控制 Friend (Visual Basic) 或 internal (C#) 類型和成員的可見度。

請參見 任務如何:建立未簽名friend 組件(C# 和 Visual Basic)參考InternalsVisibleToAttribute/keyfileSn.exe(強式名稱工具)概念程式集和全域組件快取(C# 和 Visual Basic)friend 組件(C# 和 Visual Basic)C# 編程指南其他資源建立和使用具有強式名稱的程式集Visual Basic 編程指南

如何:建立簽名的friend 組件(C# 和 Visual Basic)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.