友元程序集(C# 和 Visual Basic)
友元程序集(C# 和 Visual Basic)
Visual Studio 2013“友元程序集”是一種能夠訪問其他程序集的?Friend?(Visual Basic) 或?internal?(C#) 類型和成員的程序集。?如果將程序集指定為友元程序集,則不再需要將類型和成員標記為公共,以使其他程序集可以訪問它們。?在以下情況下,使用友元程序集尤其方便:
-
在單元測試中,測試代碼在另一個程序集中運行,但需要訪問正在測試的標記為?Friend?(Visual Basic) 或?internal?(C#) 的程序集中的成員。
-
您正在開發類庫,庫的附加部分包含在單獨的程序集中,但需要訪問標記為?Friend?(Visual Basic) 或?internal?(C#) 的現有程序集中的成員。
使用?InternalsVisibleToAttribute?特性可以為給定程序集指定一個或多個友元程序集。?下面的示例使用程序集 A 中的?InternalsVisibleToAttribute?特性,并將程序集?AssemblyB?指定為友元程序集。?這樣,程序集?AssemblyB?將能夠訪問程序集 A 中標記為?Friend?(Visual Basic) 或?internal?(C#) 的所有類型和成員。
| 在對將要訪問另一個程序集(程序集?A)的內部類型或內部成員的程序集(程序集?AssemblyB)進行編譯時,必須用?/out?編譯器選項顯式指定輸出文件的名稱(.exe 或 .dll)。?這是必需的,因為當編譯器將生成的程序集綁定到外部引用時,尚未為該程序集生成名稱。?有關更多信息,請參見?/out (C#)?和?/out (Visual Basic)。 |
只有顯式指定為友元的程序集才能訪問?Friend?(Visual Basic) 或?internal?(C#) 類型和成員。?例如,如果程序集 B 是程序集 A 的友元,且程序集 C 引用了程序集 B,則 C 不能訪問 A 中的?Friend?(Visual Basic) 或?internal?(C#) 類型。
編譯器對傳遞給?InternalsVisibleToAttribute?特性的友元程序集名稱執行一些基本驗證。?如果程序集?A?將?B?聲明為友元程序集,則驗證規則如下:
-
如果程序集?A?具有強名稱,則程序集?B?也必須具有強名稱。?傳遞給特性的友元程序集名稱必須包括程序集名稱,以及用于簽發程序集?B?的強名稱密鑰的公鑰。
傳遞給?InternalsVisibleToAttribute?特性的友元程序集名稱不能是程序集?B?的強名稱:不包含程序集版本、區域性、結構或公鑰標記。
-
如果程序集?A?不具有強名稱,則友元程序集名稱應僅包含該程序集名稱。?有關更多信息,請參見如何:創建未簽名友元程序集(C# 和 Visual Basic)。
-
如果程序集?B?具有強名稱,則必須使用項目設置或命令行?/keyfile?編譯器選項,為程序集?B?指定強名稱密鑰。?有關更多信息,請參見如何:創建簽名的友元程序集(C# 和 Visual Basic)。
StrongNameIdentityPermission?類還提供共享類型的功能,其與友元程序集的區別如下:
-
StrongNameIdentityPermission?應用于單個類型,而友元程序集應用于整個程序集。
-
如果程序集?A?中有您希望與程序集?B?共享的數百個類型,則必須將?StrongNameIdentityPermission?添加到所有這些類型。?如果使用友元程序集,則只需聲明友元關系一次。
-
如果使用?StrongNameIdentityPermission,則必須將希望共享的類型聲明為公共類型。?如果使用友元程序集,則將共享的類型聲明為?Friend?(Visual Basic) 或?internal?(C#)。
有關如何從模塊文件(具有 .netmodule 擴展名的文件)訪問程序集的?Friend?(Visual Basic) 或?internal?(C#) 類型和方法的信息,?請參見/moduleassemblyname (Visual Basic)?和?/moduleassemblyname (C#)。
任務
如何:創建未簽名友元程序集(C# 和 Visual Basic) 如何:創建簽名的友元程序集(C# 和 Visual Basic)參考
InternalsVisibleToAttribute StrongNameIdentityPermission概念
程序集和全局程序集緩存(C# 和 Visual Basic) C# 編程指南其他資源
Visual Basic 編程指南總結
以上是生活随笔為你收集整理的友元程序集(C# 和 Visual Basic)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server 文件路径
- 下一篇: 项目管理知识体系实战专家胡立