应用程序域:(Application Domain,简称App Domain)一组程序集的一个逻辑容器,进程中的一个逻辑分区。通常由运行时宿主创建和 *** 作。AppDomain唯一的作用就是进行隔离。
具体功能:
隔离,一个AppDomain中的代码创建的对象不能由另一个AppDomain中的代码直接访问。达到隔离应用程序的效果。当然如果要访问别的AppDomain中的内容,可以使用“按引用封送”或者“按值封送”的语义。
AppDomain可以卸载,但不能卸载单独的程序集或类型,只能卸载整个应用程序域。从而卸载包含在该AppDomain中的所有程序集。
AppDomain可以单独保护,AppDomain在创建后,会应用一个权限集,它决定了向这个AppDomain中运行的程序集授予的最大权限。从而保护宿主加载的代码不被破坏。
可以单独实施配置,AppDomain在创建后,会关联一组配置设置。这些设置主要影响CLR在AppDomain中加载程序集的方式。这些设置涉及搜索路径、版本重定向、卷影复制以及加载器优化。
Embedding是嵌入的意思
Manifest
Windows XP通过XML文件来实现这一功能,这些XML文件保存了有关应用程序配置的元数据,这里所说的XML文件,就是Manifest清单文件。
Manifest事实上就是一个以manifest为后缀的XML文件,用于组织和描述隔离应用程序及并行组件,其内部的信息如<assemblyIdentity>元素则标识着一个唯一的程序集,和其他信息一起,他们用于COM类、接口及库的绑定和激活,而这些信息,以往都是存储在注册表中的。另外,Manifests也制定了组成程序集的文件及Windows类。
二、Manifest的分类
在Windows XP中,事实上是在NET中,把Manifests分类为如下几种类型:
1、程序集Manifests(Assembly Manifests):主要用于描述程序集,管理程序集的名字、版本、资源、依赖程序集。其中共享程序集的Manifests存储在Windows的WinSxS目录中。私有的程序集Manifests则存可以作为一个资源存储在DLL中,也可以存储在应用程序目录下。
2、应用程序Manifests(Application Manifests):这类Manifests则用于描述隔离应用程序,它管理着此应用程序在运行时要绑定的共享的并行组件的名字、版本。该Manifests可以作为一个文件(manifest文件)存储在应用程序相同的目录下,也可以作为一种资源嵌入在可执行文件内部(Embed Manifest)。
3、应用程序配置文件(Application Configuration Files):对于并行组件及隔离应用程序来说,使用这种Manifests来“Override and Redirect”所依赖程序集的版本。
4、发行配置文件(Publisher Configuration Files):用于重定向并行组件的版本倒另外一个合适的版本的Manifests。此时,被重定向的新程序集应该和原来的旧程序集具有相同的主次(majouminor)版本号。
三、Windows对于Manifest的处理
XP以前版本的windows,会像以前那样执行这个exe文件,寻找相应的dll,没有分别,Manifest只是个多余的文件或资源,dll文件会直接到system32的目录下查找,并且调用。
而XP及其以后的 *** 作系统,则会首先读取Manifest,获得exe文件需要调用的DLL列表(此时获得的,并不直接是DLL文件的本身的位置,而是DLL的manifest) *** 作系统再根据DLL的Manifest提供的信息去寻找对应的DLL ,这样就可能区别不同版本的同一个DLL文件。
这就说明了为什么我的程序可以在2000下面运行,而在XP及2003上无法运行。
这也使得很多木马可以利用这个特点实现限制安全软件。
四、VS2005种的Manifest配置
使用Visual Studio 2005以后的一个新问题是,VS2005带的80新版的C运行库(VC 80 CRT)文件在XP以后支持manifest的Windows版本中被调用时,将会check一下Application自身的Manifest,否则将会拒绝被调用,这也就是说,使用Visual Studio开发的Application,Manifest将是必不可少的(搞不懂MS为啥要这样设置,反正与VS2003NET不同了,也许除了MS自己说的哪些冠冕堂皇的原因,至少这样一来Linux的Wine模拟要麻烦多了)
不过,如果你的程序是静态链接的,没有使用dll,且只使用了 *** 作系统核心的 Kernel32dll, User32dll, Ole32dll, 或ShDocVWdll 等,那么你可以不需要考虑Manifest, 可以关掉它。此时,在VS2005种中,project的设置必须是Use Standard Windows Libraries、Not Using ATL、No Common Language Runtime support
其实我也不是很懂,你这个可能是编程软件出现了一些问题,不知是不是?
Manifest
Windows XP通过XML文件来实现这一功能,这些XML文件保存了有关应用程序配置的元数据,这里所说的XML文件,就是Manifest清单文件
Manifest事实上就是一个以manifest为后缀的XML文件,用于组织和描述隔离应用程序及并行组件,其内部的信息如元素则标识着一个唯一的程序集,和其他信息一起,他们用于COM类、接口及库的绑定和激活,而这些信息,以往都是存储在注册表中的另外,Manifests也制定了组成程序集的文件及Windows类
二、Manifest的分类
在Windows XP中,事实上是在NET中,把Manifests分类为如下几种类型:
1、程序集Manifests(Assembly Manifests):主要用于描述程序集,管理程序集的名字、版本、资源、依赖程序集其中共享程序集的Manifests存储在Windows的WinSxS目录中私有的程序集Manifests则存可以作为一个资源存储在DLL中,也可以存储在应用程序目录下
2、应用程序Manifests(Application Manifests):这类Manifests则用于描述隔离应用程序,它管理着此应用程序在运行时要绑定的共享的并行组件的名字、版本该Manifests可以作为一个文件(manifest文件)存储在应用程序相同的目录下,也可以作为一种资源嵌入在可执行文件内部(Embed Manifest)
3、应用程序配置文件(Application Configuration Files):对于并行组件及隔离应用程序来说,使用这种Manifests来“Override and Redirect”所依赖程序集的版本
4、发行配置文件(Publisher Configuration Files):用于重定向并行组件的版本倒另外一个合适的版本的Manifests此时,被重定向的新程序集应该和原来的旧程序集具有相同的主次(majouminor)版本号
三、Windows对于Manifest的处理
XP以前版本的windows,会像以前那样执行这个exe文件,寻找相应的dll,没有分别,Manifest只是个多余的文件或资源,dll文件会直接到system32的目录下查找,并且调用
而XP及其以后的 *** 作系统,则会首先读取Manifest,获得exe文件需要调用的DLL列表(此时获得的,并不直接是DLL文件的本身的位置,而是DLL的manifest) *** 作系统再根据DLL的Manifest提供的信息去寻找对应的DLL ,这样就可能区别不同版本的同一个DLL文件
这就说明了为什么我的程序可以在2000下面运行,而在XP及2003上无法运行
这也使得很多木马可以利用这个特点实现限制安全软件
四、VS2005种的Manifest配置
使用Visual Studio 2005以后的一个新问题是,VS2005带的80新版的C运行库(VC 80 CRT)文件在XP以后支持manifest的Windows版本中被调用时,将会check一下Application自身的Manifest,否则将会拒绝被调用,这也就是说,使用Visual Studio开发的Application,Manifest将是必不可少的(搞不懂MS为啥要这样设置,反正与VS2003NET不同了,也许除了MS自己说的哪些冠冕堂皇的原因,至少这样一来Linux的Wine模拟要麻烦多了)
不过,如果你的程序是静态链接的,没有使用dll,且只使用了 *** 作系统核心的 Kernel32dll,User32dll,Ole32dll,或ShDocVWdll 等,那么你可以不需要考虑Manifest,可以关掉它此时,在VS2005种中,project的设置必须是Use Standard Windows Libraries、Not Using ATL、No Common Language Runtime support
Visual Studio 是目前最流行的 Windows 平台应用程序开发环境。目前已经开发到 100 版本,也就是 Visual Studio 2010。正在开发的版本为110版本,也就是Windows 8的搭档(预览版本Visual Studio11)。
编辑本段
发展历程
Visual Studio 97 是最早的 Visual Studio 版本。包含有面向 Windows 开发使用的 Visual Basic 50、Visual C++ 50,面向 Java 开发的 Visual J++ 和面向数据库开发的 Visual FoxPro,还包含有创建 DHTML (Dynamic HTML) 所需要的 Visual InterDev。其中,Visual Basic 和 Visual FoxPro 使用单独的开发环境,其他的开发语言使用统一的开发环境。
1998 年,微软公司发布了 Visual Studio 60。所有开发语言的开发环境版本均升至 60。这也是 Visual Basic 最后一次发布,从下一个版本 (70) 开始,Microsoft Basic 进化成了一种新的面向对象的语言:Microsoft Basic NET。由于微软公司对于 Sun 公司 Java 语言扩充导致与 Java 虚拟机不兼容被 Sun 告上法庭,微软在后续的 Visual Studio 中不再包括面向 Java 虚拟机的开发环境。
2002 年,随着 NET 口号的提出与 Windows XP / Office XP 的发布,微软发布了 Visual Studio NET(内部版本号为 70)。在这个版本的 Visual Studio 中,微软剥离了 Visual FoxPro 作为一个单独的开发环境以 Visual FoxPro 70 单独销售,同时取消了 Visual InterDev。与此同时,微软引入了建立在 NET 框架上(版本10)的托管代码机制以及一门新的语言 C# (读作 C Sharp,意为 C++++)。C# 是一门建立在 C++和 Java 基础上的现代语言,是编写 NET 框架的语言。
NET 的通用语言框架机制(Common Language Runtime, CLR),其目的是在同一个项目中支持不同的语言所开发的组件。所有 CLR 支持的代码都会被解释成为 CLR 可执行的机器代码然后运行。
Visual Basic、Visual C++ 都被扩展为支持托管代码机制的开发环境,且 Visual Basic NET更是从 Visual Basic 脱胎换骨,彻底支持面向对象的编程机制。而 Visual J++ 也变为 Visual J#。后者仅语法同 Java 相同,但是面向的不是 Java 虚拟机,而是 NET Framework。
2003 年,微软对 Visual Studio 2002 进行了部分修订,以 Visual Studio 2003 的名义发布(内部版本号为 71)。Visio 作为使用统一建模语言(UML)架构应用程序框架的程序被引入,同时被引入的还包括移动设备支持和企业模版。NET 框架也升级到了 11。
2005 年,微软发布了 Visual Studio 2005。NET 字眼从各种语言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向 NET 框架的(版本20)。
这个版本的 Visual Studio 包含有众多版本,分别面向不同的开发角色。同时还永久提供免费的 Visual Studio Express 版本。
随着即将发布的 Windows Vista和 Office 2007,Visual Studio 9 也渐渐浮出水面。Visual Studio 9 目前可以确定的是支持建立于 DHTML 基础上的 AJax 技术,这种微软在 Visual InterDev 时代提出的基于异步的客户端动态网页技术在当年并没有像微软预期中的那么流行起来,反而随着 GMail 等应用而东山再起,渐渐成为主流网络应用之一。同时 Visual Studio 9 会强化对于数据库的支持以及微软新的基于工作流(Workflow)的编程模型。预计为了保持与 Office 系列的统一,Visual Studio 9 的名称为 Visual Studio 2007。
2007年11月,微软发布了 Visual Studio 2008 英文版,
2008年2月14日发布了简体中文专业版。
2010年4月12微软发布Visual Studio 2010以及NET Framework 40,并于2010年5月26发布了中文版
编辑本段
Visual Studio 2010组件
Visual Basic NET 2010
Visual Basic NET 2010(版本号:100),提供支持Dynamic Language Runtime (DLR)。Visual Basic NET 10同时也是Silverlight 20计划的一部分。
Visual C++ NET 2010
Visual C++ NET 2010(版本号:100),于2010年发布,是目前最新的版本。Visual C++ NET 开发团队考虑使用 SQL Server Compact 格式的数据库来存储源码的相关信息。此版也加入了现代化的C++并行运算库 Parallel Patterns Library。此版建构于NET 40之上,但仍支持机器码的编译。
Visual C# NET 2010
Visual C# NET 2010(版本号:40)是微软开发的一种面向对象的编程语言,是微软NET开发环境的重要组成部分。它是为生成在 NET Framework 上运行的多种应用程序而设计的。C# 简单、功能强大、类型安全,而且是面向对象的。C# 凭借它的许多创新,在保持 C 样式语言的表示形式和优美的同时,实现了应用程序的快速开发。
Visual F# NET 2010
Visual F# NET(版本号:20)是由微软发展的为微软NET语言提供运行环境的程序设计语言,是函数编程语言(FP,Functional Programming),函数编程语言最重要的基础是 Lambda Calculus 。它是基于OCaml的,而OCaml是基于ML函数程式语言。有时F#和OCaml的程式可以交互编译。
编辑本段
Visual Studio 2008版本特点
Visual Studio 2008 在三个方面为开发人员提供了关键改进:
快速的应用程序开发
高效的团队协作
突破性的用户体验
Visual Studio 2008 提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序。
Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用 NET Framework 35 加速开发)、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持 AJAX 的 Web 应用程序。
开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web 应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运行并完全访问 ASP NET 应用程序服务和 Microsoft 平台。
快速的应用程序开发
为了帮助开发人员迅速创建先进的软件,Visual Studio 2008 提供了改进的语言和数据功能,例如语言集成的查询 (LINQ),各个编程人员可以利用这些功能更轻松地构建解决方案以分析和处理信息。
Visual Studio 2008 还使开发人员能够从同一开发环境内创建面向多个 NET Framework 版本的应用程序。开发人员能够构建面向 NET Framework 20、30 或 35 的应用程序,意味他们可以在同一环境中支持各种各样的项目。
突破性的用户体验
Visual Studio 2008 为开发人员提供了在最新平台上加速创建紧密联系的应用程序的新工具,这些平台包括 Web、Windows Vista、Office 2007、SQL Server 2008 和 Windows Server 2008。对于 Web,ASP NET AJAX 及其他新技术使开发人员能够迅速创建更高效、交互式更强和更个性化的新一代 Web 体验。
高效的团队协作
Visual Studio 2008 提供了帮助开发团队改进协作的扩展的和改进的服务项目,包括帮助将数据库专业人员和图形设计人员加入到开发流程的工具。
编辑本段
Visual Studio 2010版本特点
● 支持 Windows Azure,微软云计算架构迈入重要里程碑。
● 助力移动与嵌入式装置开发,三屏一云商机无限。
● 实践当前最热门的 Agile/Scrum 开发方法,强化团队竞争力。
● 升级的软件测试功能及工具,为软件质量严格把关。
● 搭配 Windows 7,Silverlight 4 与 Office,发挥多核并行运算威力,
创建美感与效能并重的新一代软件。
● 支持最新C++标准,增强IDE,切实提高程序员开发效率。
编辑本段
使用 Microsoft NET Framework 35
NET Framework 提供了用于解决常见编程任务的构建基块(预制的软件),从而能够快速构造具有出色的最终用户体验的紧密联系的应用程序。在 NET Framework 模型业务流程上有效构建的紧密联系的应用程序有利于在异类环境中实现系统集成。
Visual Studio 和 NET Framework 的结合使用减少了对公用管道代码的需要,从而缩短了开发时间并使开发人员能够集中精力解决业务问题。
NET Framework 35 是在 NET Framework 30 的基础上构建的更高版本。得到增强的功能领域包括基类库、Windows workflow foundation、Windows Communication Foundation、Windows Presentation Foundation 和 Windows CardSpace。
编辑本段
Microsoft NET Framework 40更新
1、代码片段(Code Snippets):
代码段是预先开发的代码模板,可以节省我们对有关语法思考的时间。在VS 2005和VS 2008中,已经有建立了很多代码段。不过,这些只适用于隐藏代码(code behind)。在VS 2010中代码片段支持JScript,HTML以及asp,net标记。在下面画面,展示了JScript和HTML片段的快捷菜单。
2、New Profiles:
在以前的dotnet版本中,我们已经看到过不同的开发环境的配置。如 VB, C#, Web development 和General Development。我们根据自己的需要选择一个环境配置。这些选择将在第一次安装visual studio之后或者通过import export选项。
3、Generate From Usage:
在ASP,Net以前的版本,微软推出了从现有的代码中进行代码重构来生成方法,在In ASP,NET40 中, Generate From Usage 有了新概念,能基于现有的代码来生成属性,方法,类和的其它类型。
4、Multi-Targeting:
在2008中就能创建一个20或者30版本创建项目,而不是用默认的35去开发。也是是说,有一个选择项去改变开发项目的framework版本。
在2010中亦有相同选项功能,并做出相应的提高。在以前的版本中,如果你使用framework 20创建一个项目。智能感仍将能显示35版本的类型和成员。如果你不能确定所选择的framework内的成员,所以你就会有更多的机会去出错。但是,在VS2010的智能感知会只向您显示你选择的framework 版本。
5、MultiMonitor:
Visual Studio 2010 给我们提供能将IDE的窗体移动 visual studio IDE之外,将它放至在桌面上。它还支持多面地去看不同的IDE窗体。如果我们关闭Visual Studio,并再次打开它,我们会发现所有的窗体在我们最后一次放置的地方。
6、Code Navigation:
新的导航使我们在文件中更快搜索术语。但它只能即在App_Code文件夹类文件,搜索您键入文本。它不适用于HTML或代码隐藏文件。在下面的例子,它显示出我的键入函数名称,它导航到窗口,选择窗体中的任何一个,它将能定位到选择的函数定义。
7、View Call Hierarchy:
这有助于查看函数和属性的使用,例如,如果你在一个函数名右键,它会告诉你的函数使用分层列表。
8、代码高亮突出显示:
选择一个标识符,IDE会为你突出的被使用的地方。例如我选择变量i,在它不同的使用地方,突出的显示。
9、智能提示的改进:
在VS 2008中,为一个对象选择属性时,它将根据输入的字母的顺序排列,为你提供智能提示。
在VS2010中它将向你显示基于组的属性,例如,如果您的文本框对象后键入text, 它将向你显示Text, TextChanged, TextMode。它也支持Pascal的智能提示。 例如,你输入TC,它将导航TextChanged 成员。
10、EnablePersistedSelection:
当我们选择像datalist 或者gridview 控件中的一行时,如果我们移动到另一个网页,在新的页上,它选择同编号行,虽然我们只在第一页选择了它。
为了避免这个,ASP,Net 40为这些控件推出了一种新的属性,这是EnablePersistedSelection。如果设置为true,在其他网页中,将不能选择同一编号。例如,导航到原始网页,第一页将显示选定的最初选定的行。
11、WebConfig Transformation
通常为我们的开发环境需要在webconfig中设置一些值,然后在部署或测试的时候,我们手工地改变这些值。
12、URL Routing
在asp,net 40中你不需要为每个单独的处理程序类来定义routing。建立一个辅助函数MapPageRoute,帮助您实现更快速的routing。这些routes在Application_Start中注册。对于这个在Globalasax SetRouting方法的示例中设置routing,第一个参数是routing的友好名称,第二个参数是检查URL进行模式匹配,第三个是在aspx页将这一功能为用户实施。
13、Add Reference Dialog:
在Visual Studio以前的版本中,当打开reference dialog box时,这将需要一些时间来加载NET程序集文件开始直到它加载从GAC中所有引用。在默认情况下打开项目选项卡,在VS2010上添加引用。
14、Compressing Session Values
ASP,NET session外的进程的状态值保存在数据库或服务器上。这些都是以序列化格式保存。发送到服务器时候,更多更大的session将消耗更多的资源 。现在,这些可以被压缩在一个新的构建compressionEnabled属性中。这种对sessionState元素属性,可以在webconfig这样被声明。
15、Dynamic lookup:
有一个新的静态类型,dynamic。我们可以使用它作为任何对象的类型。如果有任何关于它的用法,我们能在运行时,得到它的错误。
16、Optional Parameters
在asp,net 4之前,为了实现可选的参数,我们创建重载函数。但现在在C#中,可选参数没有更多的限制。但是象VB的可选参数必须放置到最后。例如:
publicvoid FunctionOptionalParam(string Name, int Age, string Country ="")
我们可以不提要求的可选参数的值。
FunctionOptionalParam("My Full Name",20);
17、Named Parameters:
命名的参数可以忽略的参数顺序,在不同顺序的使用带名称的参数。
18、Meta Tags:
HtmlMeta类可用于动态添加HTML meta的标签和HTMLMeta的名称,内容属性可以被用来在运行时动态添加任何继标记名称和它的值。
在asp,net 40 Page类中有两个属性MetaDescription和MetaKeywords。这些可以用来在运行时在html中为description和keyword元素添加 meta 的值。
19、Generating Client IDs:
web控件的客户端ID是根据父控件ID动态的产生。 所以,如果你在一个用户控件中使用textbox,我们必须查看为它生产什么样ID,才能在客户端的脚本中直接使用。
有时这些是动态的改变用户控件的名称也更改它的子控件ID。在asp,net 40中,这个问题是可以由页面的ClientIDMode属性解决。它有如下可能的值:AutoID , Static, Predictable 和Inherit。
20、Permanent Redirect :
ASP,NET 40中一个新的命令ResponseRedirectPermanent可用于更改服务器页上的头信息。因此,如果用户去为他直接重定向到新的一页,并为他节省了双行页面。在该网站和网页更新的发现头和更新其索引信息,展示最新的信息重新搜索索引同样的搜索引擎。
21、New Browser Definitions:
在ASP,net 35近几年,一些浏览器已经更新,其中包括Google chrome和那些支持blackberry智能手机。 ASP,Net 40的>
首先,描述一下AppDomain是什么:当一个程序集被执行时,系统就会自动为其创建一个AppDomain,每一个AppDomain属于某个进程,一个进程内可以有多个AppDomain;每个AppDomain创建时都有个默认的名称,该名称就是加载的程序集的名称(带扩展名exe)。
同一windows 进程内的不同AppDomian之间可以互相共享资源,如:CLR,基本NET类型,地址空间及线程。
程序集在AppDomain中的调用:在同一进程内,如果不同的AppDomain调用同一Assembly会有以下两种情况:
1、会在每个AppDomain中加载该Assembly并为各AppDomain所调用;
2、会在该进程内,不在任何的AppDomain中单据加载该Assembly,然后同一进程内的所有AppDomain都可以对其进行调用。这种方式加载的程序集(Assembly)称为域无关(Domain Neutral)的。
AppDomain和线程的关系式正交的;n<--->n的关系。
注意当AppDomain加载了某个Assembly后就无法将其单独卸载,不过可以讲AppDomain卸载掉。
卸载AppDomain时CLR会卸载当前在该AppDomain执行的所有线程,如果此时在执行非托管代码就可能产生问题,并且改AppDomain中所有的托管对象也会被垃圾回收器强制回收;
AppDomain的孤立性:
1)、一个AppDomain可以独立于其他的AppDomain被卸载掉;
2)、一个AppDomain不能放问其他AppDomain内的Assembly和对象;
3)、若没有发生跨边界的异常抛出,一个AppDomain拥有自己独立的异常管理策略。这也就意味着同一进程内的某一AppDomain发生异常不会影响到其他的AppDomain。
4)、每个AppDomain可以定义独自的程序集代码访问安全策略;
5)、每个AppDomain可以定义独自的规则,以便在CLR加载前定位程序集的位置
以上就是关于C#里的应用程序域“AppDomain”是什么全部的内容,包括:C#里的应用程序域“AppDomain”是什么、Embedding manifest是什么意思、怎样才能脱机浏览manifest文件XML等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)