簡體   English   中英

C#中的朋友程序集

[英]Friend Assemblies in C#

我正在嘗試使用[InternalsVisibleTo()]屬性創建一些'朋友組件',但我似乎無法讓它工作。 我已經按照微軟的說明創建了簽名好友程序集 ,我無法看到我出錯的地方。 所以我會在這里詳細說明我的步驟,希望有人可以發現我故意的錯誤......?

創建一個強名稱密鑰並提取公鑰,因此:

sn -k StrongNameKey
sn -p public.pk
sn -tp public.pk

將強名稱密鑰添加到每個項目並啟用簽名。

創建一個名為Internals的項目和一個具有內部屬性的類:

namespace Internals
{
    internal class ClassWithInternals
    {
        internal string Message { get; set; }
        public ClassWithInternals(string m)
        {
            Message = m;
        }
    }
}

創建另一個名為TestInternalsVisibleTo的項目:

namespace TestInternalsVisibleTo
{
    using Internals;

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            var c = new Internals.ClassWithInternals("Test");
            Console.WriteLine(c.Message);
        }
    }
}

編輯Internals項目的AssemblyInfo.cs文件,並添加必要的屬性:

[assembly: AssemblyTitle("AssemblyWithInternals")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("Internals")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2010")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: Guid("41c590dc-f555-48bc-8a94-10c0e7adfd9b")]

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

[assembly: InternalsVisibleTo("TestInternalsVisibleTo PublicKey=002400000480000094000000060200000024000052534131000400000100010087953126637ab27cb375fa917c35b23502c2994bb860cc2582d39912b73740d6b56912c169e4a702bedb471a859a33acbc8b79e1f103667e5075ad17dffda58988ceaf764613bd56fc8f909f43a1b177172bc4143c96cf987274873626abb650550977dcad1bb9bfa255056bb8d0a2ec5d35d6f8cb0a6065ec0639550c2334b9")]

最后......建立!

我收到以下錯誤:

錯誤CS0122:由於其保護級別,“Internals.ClassWithInternals”無法訪問
錯誤CS1729:'Internals.ClassWithInternals'不包含帶有1個參數的構造函數錯誤CS1061:'Internals.ClassWithInternals'不包含'Message'的定義,也沒有擴展方法'Message'接受類型'Internals的第一個參數。可以找到ClassWithInternals'(您是否缺少using指令或程序集引用?)

基本上,就好像我沒有使用InternalsVisibleTo attrbute。 現在,我不會陷入責備工具的陷阱,所以這里有什么? 任何人?

您在InternalsVisibleTo屬性中的程序集名稱后缺少逗號。

它應該是:

[assembly: InternalsVisibleTo("TestInternalsVisibleTo, PublicKey=....];

程序集引用可能很挑剔,遺憾的是編譯器在屬性作為字符串出現時不會嘗試驗證它們。 如果您錯誤拼寫程序集引用或提供無效密鑰 - 一切都將編譯 - 但只是不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM