Tôi đang cố gắng để tạo ra một số 'hội đồng người bạn' bằng cách sử dụng thuộc tính [InternalsVisibleTo()], nhưng tôi dường như không thể làm cho nó hoạt động. Tôi đã làm theo hướng dẫn của Microsoft cho creating signed friend assemblies và tôi không thể nhìn thấy nơi tôi đang đi sai. Vì vậy, tôi sẽ trình bày chi tiết các bước của tôi ở đây và hy vọng ai đó có thể phát hiện ra sai lầm có chủ ý của tôi ...?Bạn bè hội đồng trong C#
Tạo một khóa tên mạnh mẽ và trích xuất các khóa công khai, như sau:
sn -k StrongNameKey
sn -p public.pk
sn -tp public.pk
Add phím tên mạnh cho từng dự án và cho phép ký.
Tạo một dự án có tên Internals và một lớp học với một tài sản nội bộ:
namespace Internals
{
internal class ClassWithInternals
{
internal string Message { get; set; }
public ClassWithInternals(string m)
{
Message = m;
}
}
}
Tạo một dự án có tên 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);
}
}
}
Chỉnh sửa các tập tin AssemblyInfo.cs cho dự án Internals, và thêm thuộc tính cần thiết:
[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")]
Và cuối cùng ... xây dựng!
tôi nhận được các lỗi sau đây:
lỗi CS0122: 'Internals.ClassWithInternals' là không thể tiếp cận do mức độ bảo vệ CS1729
lỗi của nó: 'Internals.ClassWithInternals' không chứa một constructor mà mất 1 đối số lỗi CS1061: 'Internals.ClassWithInternals' không chứa định nghĩa cho 'Thư' và không có phương thức mở rộng 'Thư' chấp nhận đối số đầu tiên của loại 'Internals.ClassWithInternals' có thể được tìm thấy (bạn thiếu một chỉ thị sử dụng hoặc tham chiếu assembly ?)
Về cơ bản, có vẻ như tôi đã không sử dụng InternalsVisibleTo attrbute. Bây giờ, tôi sẽ không rơi vào cái bẫy đổ lỗi cho các công cụ, vậy có gì ở đây? Bất kỳ ai?
Bạn có chắc chắn TestInternalsVisibleTo đang được ký? Khi bạn xem nó trong Reflector, bạn có thấy nó có mã thông báo khóa công khai không? –