如何:创建签名的友元程序集(C# 和 Visual Basic) Visual Studio 2013    本示例演示了如何将友元程序集和具有强名称的程序集一起使用. 这两种程序集必须都使用强名称. 尽管本示例中的两种程序集使用了相同的密钥,但您可以对这两种程序集使用不同的密钥. 在 Visual Studio 中创建签名的程序集和友元程序集 打开 Visual Studio 命令提示. 使用强名称工具,通过以下命令序列生成 keyfile 并显示其公钥. 有关更多信息,请参见Sn.exe(强…
友元程序集(C# 和 Visual Basic) Visual Studio 2013 “友元程序集”是一种能够访问其他程序集的 Friend (Visual Basic) 或 internal (C#) 类型和成员的程序集. 如果将程序集指定为友元程序集,则不再需要将类型和成员标记为公共,以使其他程序集可以访问它们. 在以下情况下,使用友元程序集尤其方便: 在单元测试中,测试代码在另一个程序集中运行,但需要访问正在测试的标记为 Friend (Visual Basic) 或 internal …
友元程序集简介 我们知道一个类中被定义为internal的成员(包括类型.方法.属性.变量.事件)是只能在同一个程序集中被访问到的(当然了,我这里说的是正常的方式,不包括通过反射来访问).这个规则在.NET2.0稍稍被打破,InternalsVisibleToAttribute允许我们设置一个程序集的internal的成员可以被特定的成员访问到.我们把包含这些internal成员的程序集称为源程序集(source assembly),而这个设定的程序集称为友元程序集(friend assembl…
下面的例子演示了创建签名程序集和有元程序集.这就要求两个程序集都是强命名,在下面的例子中,两个程序集都用了同一个秘钥,也可以用不同的秘钥. 1. 生成秘钥, 这个在前面的博客中有说明,生成秘钥文件sn.exe. 得到了公钥密码,如图 2. 创建C#文件,friend_signed_A.代码应用InternalsVisibleToAttribute 声明 friend_signed_B为有元程序集.这时要把公钥加进代码中. using System.Text; using System.Threa…
在团队开发中,如果一个程序集中要调用另外一个程序集,但是要被调用的那个程序集又不想用public来公开自己的类, 那么怎么办,就是用最后一种internal来用来做类的可见性了. 下面来看一个简单例子: 1. 在一个解决方案中创建两个类库项目A和B,分别在两个类库项目中创建类ClassA和ClassB 2. 将项目B中ClassB的访问级别设置为internal 3. 在项目A中添加对项目B的引用 4. 此时在ClassA中是访问不到ClassB的,如果想让ClassA可以访问ClassB,必须…
项目开发的过程中,调试使用的可能是最多的操作.任何代码写出来都需要经过调试和整合,以此扩展和提升程序的稳定性和可靠性.谈到.NET的单元测试,在这里就得提提.NET的友元程序集这一特性,也借用.NET进行单元测试的一个较为好用的.NET属性,来讲解一下程序集.定制Attribute的相关知识.一些知识需要反复的去品味和反思,不要觉得你会了就不在意,等你在意的时候,你就有些力不从心的意思了. 生活在于不停的折腾,只有经过磨练,才可知何时需要安分,何时需要挑战. 毒鸡汤喝完了,来聊聊正事... 一.…
C#动态创建和动态使用程序集.类.方法.字段等 分类:技术交流 (3204)  (3)   首先需要知道动态创建这些类型是使用的一些什么技术呢?其实只要相关动态加载程序集呀,类呀,都是使用反射,那么动态创建也一样使用的是反射,是属于反射的技术!也就是将对象或者数据映射成一个对象或者程序集保存起来而已. 首先我们需要了解每个动态类型在.net中都是用什么类型来表示的. 程序集:System.Reflection.Emit.AssemblyBuilder(定义并表示动态程序集) 构造函数:Syste…
在一个团队或者公司中,一个人开发出来的程序集中的类的可见性有public,private和internal, public:对所有程序集可见,就是说如果拿到程序集.DLL文件,那么类就被公开了. private:对程序集内部可见,就是自己定义来自己用,不公开. internal:对友元程序集和内部可见,是我的朋友才能用这个类.   好了,如果一个程序集中要调用另外一个程序集,但是要被调用的那个程序集又不想用public来公开自己的类,那么怎么办,就是用最后一种internal来用来做类的可见性了…
上一篇,介绍了开发环境需要的工具和版本,本篇将动手创建VS解决方案. 对于本系列文章提供的示例,我想通过两种途径来演示,一种是单元测试,另外为了能更直观的看到效果,还会提供一个用户界面来展示.为了不分散注意力,前期只提供非常简陋的原始界面,后期如果有时间的话,我想使用MVC +某个RIA框架+EF,基于BS架构开发一个权限模块来演示应用程序框架的使用.另外如果大家兴趣高昂,我还想使用WPF+WCF+DEV控件+EF基于CS架构重新开发这个权限模块,以演示应用程序框架的复用能力. 首先,打开VS,…
C#中的访问修饰符internal可以使类型在同程序集中可以被相互访问.但有时会有这样一个要求,我们希望一个程序集中的类型可以被外部的某些程序集访问,如果设置成public的话,就被所有的外部程序集访问:或是在单元测试中,测试代码在另一个程序集中运行,但需要访问正在测试的标记为internal的程序集中的成员.要达到上述要求我们可以使用有元程序集. 看例子: 我是在D盘上新建了一个"friend Assembly"文件夹,把所有的文件(.dll..cs..exe)都放在里面. 1. 新…