Tim*_*ong 12 .net c# clr build friend
我正在尝试使用[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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
创建另一个名为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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑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")]
Run Code Online (Sandbox Code Playgroud)
最后......建立!
我收到以下错误:
错误CS0122:'Internals.ClassWithInternals'由于其保护级别
错误而无法访问CS1729:'Internals.ClassWithInternals'不包含带有1个参数的构造函数错误CS1061:'Internals.ClassWithInternals'不包含'Message'的定义没有扩展方法'Message'接受类型'Internals.ClassWithInternals'的第一个参数可以找到(你是否缺少using指令或汇编引用?)
基本上,就好像我没有使用InternalsVisibleTo attrbute.现在,我不会陷入责备工具的陷阱,所以这里有什么?任何人?
LBu*_*kin 15
您在InternalsVisibleTo属性中的程序集名称后缺少逗号.
它应该是:
[assembly: InternalsVisibleTo("TestInternalsVisibleTo, PublicKey=....];
Run Code Online (Sandbox Code Playgroud)
程序集引用可能很挑剔,遗憾的是编译器在属性作为字符串出现时不会尝试验证它们.如果您错误拼写程序集引用或提供无效密钥 - 一切都将编译 - 但只是不起作用.
| 归档时间: |
|
| 查看次数: |
5514 次 |
| 最近记录: |