热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

程序集、命名空间、Internal

简单说程集就是一个文件,然后里面包括其他的东西。如资源,自己写的代码。一个程序集中可能包含多个名称空间,internal访问修饰符就是限定在同一程序集中①什么是程序集?可以把程序集简单理

简单说程集就是一个文件,然后里面包括其他的东西。如资源,自己写的代码。
一个程序集中可能包含多个名称空间,internal 访问修饰符就是限定在同一程序集中

①什么是程序集?
可以把程序集简单理解为你的.NET项目在编译后生成的*.exe或*.dll文件.
嗯,这个确实简单了些,但我是这么理解的.详细:
http://blog.csdn.net/sws8327/archive/2006/09/21/1244642.aspx

②程序集和命名空间的区别?
一个程序集可以跨越n个命名空间,一个命名空间也可以包含n个程序集.(估计你该晕了)

如果说命名空间是类库的逻辑组织形式,那么程序集就是类库的物理组织形式。只有同时指定类型所在的命名空间及实现该类型的程序集,才能完全限定该类型。(摘抄自《精通.NET核心技术--原来与架构》   电子工业出版社)

也就是说,你要创建一个类的实例,必须知道该类的  命名空间(这个一般都知道)+程序集(这个很容易被我们忽略,因为一般我们不需要引用外部的程序集,如果你用C#做过Excel文件的导入导出,就会知道必须添加一个Excel相关的程序集引用)

③怎样通过命令行创建程序集?
我对命令行向来反感,如果你想知道,look here:
http://www.cnblogs.com/3echo/archive/2006/02/14/330579.html

④我怎么把项目和程序集联系起来理解?
一个项目对应一个程序集.项目名与程序集名相同(03版,05版乱七八糟,随机生成的程序集名).
一般的我们每创建一个.NET项目(ASP.NET(VS2005里没有),WinForm,类库,控制台等),IDE都会自动生成一个AssemblyInfo.cs的文件,打开看看(03版)

 
1 using  System.Reflection;
 2
using  System.Runtime.CompilerServices;
 
3
 
4 //
  5 //  有关程序集的常规信息是通过下列
  6 //  属性集控制的。更改这些属性值可修改与程序集
  7 //  关联的信息。
  8 //
  9 [assembly: AssemblyTitle( "" )]
10 [assembly: AssemblyDescription( "" )]
11 [assembly: AssemblyConfiguration( "" )]
12 [assembly: AssemblyCompany( "" )]
13 [assembly: AssemblyProduct( "" )]
14 [assembly: AssemblyCopyright( "" )]
15 [assembly: AssemblyTrademark( "" )]
16 [assembly: AssemblyCulture( "" )]        
17
18 //
19 //  程序集的版本信息由下列 4 个值组成:
20 //
21 //       主版本
22 //       次版本 
23 //       内部版本号
24 //       修订号
25 //
26 //  您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按
27 //  如下所示使用 '*':
28
29 [assembly: AssemblyVersion( " 1.0.* " )]
30
31 //
32 //  要对程序集进行签名,必须指定要使用的密钥。有关程序集签名的更多信息,请参考 
33 //  Microsoft .NET Framework 文档。
34 //
35 //  使用下面的属性控制用于签名的密钥。
36 //
37 //  注意:
38 //    (*) 如果未指定密钥,则程序集不会被签名。
39 //    (*) KeyName 是指已经安装在计算机上的
40 //       加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
41 //        密钥的文件。
42 //    (*) 如果 KeyFile 和 KeyName 值都已指定,则 
43 //        发生下列处理:
44 //        (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
45 //        (2) 如果 KeyName 不存在而 KeyFile 存在,则 
46 //            KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
47 //    (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
48 //        在指定 KeyFile 时,KeyFile 的位置应该相对于
49 //        项目输出目录,即
50 //        %Project Directory%/obj/。例如,如果 KeyFile 位于
51 //        该项目目录,应将 AssemblyKeyFile 
52 //        属性指定为 [assembly: AssemblyKeyFile("..//..//mykey.snk")]
53 //    (*) “延迟签名”是一个高级选项 - 有关它的更多信息,请参阅 Microsoft .NET Framework
54 //        文档。
55 //
56 [assembly: AssemblyDelaySign( false )]
57 [assembly: AssemblyKeyFile( "" )]
58 [assembly: AssemblyKeyName( "" )]
59

汗,,[assembly: AssemblyTitle("")],,,,竟然程序集名是空的....不过你从该项目的文件夹里确实能翻出与项目名相同的.dll文件.估计如果你不在这条语句里赋值,IDE默认生成的程序集与项目名相同.大胆用吧.(可是,我不知道怎么用程序集?敬请期待下一篇:C#反射Reflection学习随笔_AX)

⑤自知,我的解决方案(包含0~n个项目)用到了什么程序集?
                 // 遍历访问当前应用程序域的程序集Assemble
                 foreach  (Assembly assem  in  AppDomain.CurrentDomain.GetAssemblies())
                
{
                    
//反射当前程序集的信息
                    Response.Write("Assembly:"+assem.FullName+"
");
                }


⑥我们苦苦寻觅的Assembly里面到底是什么东西?有什么值得我们去苦苦探究的?
其实在上面的AssemblyInfo.cs代码中,我们已经看出来一些东西,它里面包含该Assembly的名称/产品/描述/拷贝权..(鬼才关心)和版本号(这个很重要,但我觉得还是没什么太大的用处,是dll Hell 的克星,顺带说一句,同一Assembly名称的不同版本号的Assembly可同时运行),还有一个密钥的概念,共享程序集和部署用的,看了半天没看明白,就不误人子弟了. 
那Assembly的主要用处是:
ⅰ与反射Reflection结合起来用,动态创建你所需要的类!!
ⅱ与反射Reflection结合起来用,获得Assemble里类的信息
(据可靠的小道消息说Assembly里存的是一张包含元数据类名什么的表)

ⅲ使用别人已封装好的类.


推荐阅读
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 在当前的软件开发领域,Lua 作为一种轻量级脚本语言,在 .NET 生态系统中的应用逐渐受到关注。本文探讨了 Lua 在 .NET 环境下的集成方法及其面临的挑战,包括性能优化、互操作性和生态支持等方面。尽管存在一定的技术障碍,但通过不断的学习和实践,开发者能够克服这些困难,拓展 Lua 在 .NET 中的应用场景。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 本文探讨了在使用 Outlook 时遇到的一个常见问题:无法加载 SAVCORP90 插件,导致软件功能受限。该问题通常表现为在启动 Outlook 时会收到错误提示,影响用户的正常使用体验。文章详细分析了可能的原因,并提供了多种解决方法,包括检查插件兼容性、重新安装插件以及更新 Outlook 版本等。通过这些步骤,用户可以有效解决这一问题,恢复 Outlook 的正常运行。 ... [详细]
  • AIX编程挑战赛:AIX正方形问题的算法解析与Java代码实现
    在昨晚的阅读中,我注意到了CSDN博主西部阿呆-小草屋发表的一篇文章《AIX程序设计大赛——AIX正方形问题》。该文详细阐述了AIX正方形问题的背景,并提供了一种基于Java语言的解决方案。本文将深入解析这一算法的核心思想,并展示具体的Java代码实现,旨在为参赛者和编程爱好者提供有价值的参考。 ... [详细]
author-avatar
Hmily-西瓜先生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有