Дружественные сборки в C#
Я пытаюсь создать некоторые "дружественные сборки", используя атрибут [InternalsVisibleTo ()], но я не могу заставить его работать. Я следовал инструкциям Microsoft для создание подписанных дружественных сборок и я не вижу, где я ошибаюсь. Поэтому я подробно расскажу о своих шагах здесь и, надеюсь, кто-нибудь заметит мою преднамеренную ошибку...?
создайте ключ строгого имени и извлеките открытый ключ, таким образом:
SN-k StrongNameKey
sn-p публика.pk
СН -ТП общественности.ПК
добавьте ключ строгого имени к каждому проекту и включите подписание.
создать проект под названием внутреннее устройство и класс с внутренним свойством:
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);
}
}
}
изменить AssemblyInfo.cs-файл для проекта Internals и добавьте необходимый атрибут:
[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. Теперь, я не собираюсь попадаться в ловушку обвиняя инструменты, так что здесь? Кто?