运行时中加载该,配置文件层次结构和继承
分类:高并发

Configuration 类
注意:此类在 .NET Framework 2.0 版中是新增的。
表示适用于特定计算机、应用程序或资源的配置文件。无法继承此类。

今天在把以前写的代码生成工具从原来的.NET3.5升级到.NET4.0,同时准备进一步完善,将程序集都更新后,一运行程序在一处方法调用时报出了一个异常:

保护连接字符串

您可以在整个应用程序目录中分发 ASP.NET 配置文件,以便以继承层次结构配置 ASP.NET 应用程序。使用此结构,可以在适当的目录级别实现应用程序所需级别的配置详细信息,而不影响较高目录级别中的配置设置。

ConfigurationManager 类
注意:此类在 .NET Framework 2.0 版中是新增的。
提供对客户端应用程序配置文件的访问。无法继承此类。

 

摘自MSDN

本主题包含以下各节:

ConfigurationSettings 类
提供运行时对读取配置节和公共配置设置的支持。

混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集

保护对数据源的访问是安全应用程序最重要的目标之一。为了帮助限制对数据源的访问,必须保护连接信息(例如用户标识、密码和数据源名称)的连接信息。以纯文本形式存储用户标识和密码(例如在源代码中)会造成严重的安全问题。即使为外部源提供包含用户标识和密码信息的编译版代码,编译的代码也可能会被反汇编,用户标识和密码可能会被使用 MSIL 反汇编程序 (Ildasm.exe).aspx) 工具公开。因此,关键信息(如用户标识和密码)一定不要存在于代码中。

  • 配置结构

  • 配置继承

  • 配置设置的范围

  • 运行时计算配置设置

  • 单个文件中配置的多个 ASP.NET 资源

  • 虚拟目录中的设置和物理目录中的设置发生冲突

  • 限制 ASP.NET 继承

 

指定 Windows 身份验证(集成安全性)

建议您尽可能使用 Windows 身份验证(也称为集成安全性)。连接字符串中使用的语法依提供程序而异。下表显示 .NET Framework 数据提供程序所使用的语法。

提供程序 语法

SqlClient

Integrated Security=true;

SqlClient, OleDb

Integrated Security=SSPI;

Odbc

Trusted_Connection=yes;

OracleClient

Integrated Security=yes;

注意,在对 OleDb 提供程序使用 Integrated Security=true 时会引发异常。

安全注意

如果在连接字符串中将 Persist Security Info 关键字设置为 true 或 yes,将允许在打开连接后,从连接中获得涉及安全性的信息(包括用户标识和密码)。如果在建立连接时必须提供用户标识和密码,最安全的方法是在使用信息打开连接后丢弃这些信息,在 Persist Security Info 设置为 false 或 no 时会发生这种情况。当您向不可信的源提供打开的连接,或将连接信息永久保存到磁盘时,这点尤其重要。如果将 Persist Security Info 保持为 false,可帮助确保不可信的源无法访问连接中涉及安全性的信息,并帮助确保任何涉及安全性的信息都不会随连接字符串信息永久保存到磁盘中。默认情况下,Persist Security Info 设置为 false。

图片 1  配置结构

其调用的方法是从sqlite数据库中获取原来已经使用过的数据库连接,当时也没注意,就是准备设断点然后单步调试,结果竟然是断点无法进入方法体内,后来仔细看了一下方法体的时候发现了一个问题,就是现有的System.Data.Sqlite这个数据访问provider是针对.NET2.0环境开发(最新的版本是1.0.66.0,2010年4月18日发布的),而目前官方也没有给出最新的.NET4的数据访问支持。

不要使用通用数据链接文件

可以在通用数据链接 (UDL) 文件中提供 OleDbConnection.aspx) 的连接信息;但是,应避免这样做。UDL 文件未加密,会以明文的形式公开连接字符串信息。因为 UDL 文件对应用程序来说是基于外部文件的资源,所以,无法使用 .NET Framework 保护其安全。

ASP.NET 配置文件称为 Web.config 文件,它们可以出现在 ASP.NET 应用程序的多个目录中。ASP.NET 配置层次结构具有下列特征:

既然出现这个问题,那肯定是上GOOGLE搜索解决方案,毕竟微软不可能因为升级到了.NET4.0的程序无法访问.NET2.0的程序集吧。后来在著名的stackoverflow.com上果然找到了解决方案,就是在app.config中添加一个配置节:startup

将连接字符串存储在配置文件中

为了避免将连接字符串存储在代码中,可以将代码存储在 ASP.NET 应用程序的 web.config 文件中以及 Windows 应用程序的 app.config 文件中。

连接字符串可以存储在配置文件的 <connectionStrings> 元素中。连接字符串存储为键/值对的形式,可以在运行时使用名称查找存储在 connectionString 属性中的值。以下配置文件示例显示名为 DatabaseConnection 的连接字符串,该连接字符串引用连接到 SQL Server 本地实例的连接字符串。

图片 2 复制代码;)

<connectionStrings>
<add name="DatabaseConnection"
connectionString="Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local);"
providerName="System.Data.SqlClient" />
</connectionStrings>
  • 使用应用于配置文件所在的目录及其所有子目录中的资源的配置文件。

  • 允许您将配置数据放在将使它具有适当范围(整台计算机、所有的 Web 应用程序、单个应用程序或该应用程序中的子目录)的位置。

  • 允许重写从配置层次结构中的较高级别继承的配置设置。还允许锁定配置设置,以防止它们被较低级别的配置设置所重写。

  • 将配置设置的逻辑组组织成节的形式。

<``startup useLegacyV2RuntimeActivationPolicy``=``"true"``>

从配置文件中检索连接字符串

System.Configuration.aspx) 命名空间提供使用配置文件中存储的配置信息的类。ConnectionStringSettings.aspx) 类具有两个属性,映射到上面所示的 <connectionStrings> 示例部分中显示的名称。

ConnectionString.aspx)
连接字符串。

Name.aspx)
<connectionStrings> 部分的连接字符串的名称。

以下示例通过将连接字符串的名称传递给 ConfigurationManager.aspx),再由其返回 ConnectionStringSettings 对象,以便从配置文件中检索字符串。ConnectionString 属性用于显示此值。

Visual Basic

图片 3 复制代码;)

Option Explicit On
Option Strict On
Imports System.Configuration
Module Module1
Sub Main()
Dim settings As ConnectionStringSettings
settings = _
ConfigurationManager.ConnectionStrings("DatabaseConnection")
If Not settings Is Nothing Then
Console.WriteLine(settings.ConnectionString)
End If
End Sub
End Module

C#

图片 4 复制代码;)

using System;
using System.Configuration;
class Program
{
static void Main()
{
ConnectionStringSettings settings;
settings =
ConfigurationManager.ConnectionStrings["DatabaseConnection"];
if (settings != null)
{
Console.WriteLine(settings.ConnectionString);
}
}
}

图片 5  配置继承

<``supportedRuntime version``=``"v4.0"``/>

使用受保护的配置加密连接字符串

“受保护的配置”功能可以用于加密配置文件(例如 ASP.NET 应用程序的 Web.config 文件或 Windows 应用程序的 App.config 文件)中的敏感信息,包括用户名和密码、数据库连接字符串和加密密钥。请参见使用受保护的配置加密配置信息.aspx)、对配置节进行加密和解密.aspx)和演练:使用受保护的配置加密配置信息.aspx)。

所有 .NET Framework 应用程序都从一个名为系统根目录Microsoft .NETFramework版本号CONFIGMachine.config 的文件继承基本配置设置和默认值。Machine.config 文件用于服务器范围的配置设置。其中的某些设置不能在位于层次结构中较低级别的配置文件中被重写。

</``startup``>

通过用户输入构造连接字符串

如果从外部源(例如提供用户标识和密码的用户)获取连接字符串信息,必须验证来自该源的所有输入,确保其格式正确并且不包含影响连接的其他参数。有关详细信息,请参见验证用户输入.aspx)。

.NET 客户端应用程序(控制台和 Windows 应用程序)使用名为应用程序名称.config 的配置文件重写继承的设置。ASP.NET 应用程序使用名为 Web.config 的配置文件来重写继承的设置。

 

使用连接字符串生成器

DbConnectionStringBuilder.aspx) 类提供用于派生强类型化的连接字符串生成器的基类。这些生成器使您可以通过编程创建语法上正确的连接字符串以及分析和重建现有的连接字符串。可以使用 DbConnectionStringBuilder 类分配任意键/值对,并将生成的连接字符串传递给强类型化的提供程序。以下作为 .NET Framework 的一部分提供的数据提供程序提供从 DbConnectionStringBuilder 继承的强类型化的类:

  • SqlConnectionStringBuilder.aspx)

  • OracleConnectionStringBuilder.aspx)

  • OdbcConnectionStringBuilder.aspx)

  • OleDbConnectionStringBuilder.aspx)

ASP.NET 配置层次结构的根是一个称为根 Web.config 文件的文件,它与 Machine.config 文件位于同一个目录中。根 Web.config 文件继承 Machine.config 文件中的所有设置。根 Web.config 文件包括应用于所有运行某一具体版本的 .NET Framework 的 ASP.NET 应用程序的设置。由于每个 ASP.NET 应用程序都从根 Web.config 文件那里继承默认配置设置,因此只需为重写默认设置的设置创建 Web.config 文件。

 

请参见

集合元素中的继承

某些配置元素是集合,例如,namespaces 元素和 customErrors 元素。

在集合中,通常通过 add 子元素向集合中添加配置设置,通过 remove 子元素按键名移除配置设置,或者可以通过 clear 子元素清除整个集合。除非允许使用重复项,否则,在子配置文件中添加的设置将重写父配置文件中同一键名的设置。

说明:

存在于早期版本的 .NET Framework 中的某些集合对 add 子元素使用不同的元素名称。例如,customErrors 元素使用 error 子元素向集合中添加自定义错误。

如果收到针对 SubDir1 目录中不存在的文件发出的请求,ASP.NET 将开始搜索配置层次结构,并从最本地的 Web.config 文件(如果存在,可能位于当前目录中,也可能位于当前目录的父目录中)开始。ASP.NET 将搜索 statusCode 属性等于“404”的 customErrors 的 error 元素(ASP.NET 设置架构) 元素。一旦 ASP.NET 在配置设置中找到 404 错误,将 redirect 属性中的 URL 作为响应返回。

图片 6  配置设置的范围

配置设置具有不同的范围 - 有些具有全局范围,有些仅对应用程序范围(根 Web.config 文件或 Machine.config 文件)有效。

The scope of a configuration section is defined in the allowDefinition attribute of the configSections 的 section 元素(常规设置架构) element in the Machine.config file for all sections that are included with ASP.NET. For example, the authentication 元素(ASP.NET 设置架构) element has an allowDefinition attribute of the MachineToApplication element.这意味着,authentication 元素可以在应用程序级别的 Machine.config 文件、根 Web.config 文件和 Web.config 文件中设置。如果它是在子目录级别设置的,则会引发错误。如果没有为某个节定义 allowDefinition 属性,则默认值为 Everywhere

“元素信息”表中“可配置的位置”旁边列出了 ASP.NET 配置设置 和 常规配置设置 (ASP.NET) 中每个元素的配置设置范围。

下表列出了每个文件在配置层次结构中的级别、每个文件的名称以及对每个文件的重要继承特征的说明。

配置级别

文件名

文件说明

服务器

Machine.config

Machine.config 文件包含服务器上所有 Web 应用程序的 ASP.NET 架构。此文件位于配置合并层次结构的顶层。

根 Web

Web.config

服务器的 Web.config 文件与 Machine.config 文件存储在同一个目录中,它包含大部分 system.web 配置节的默认值。运行时,此文件是从配置层次结构中的从上往下数第二层合并的。

网站

Web.config

特定网站的 Web.config 文件包含应用于该网站的设置,并向下继承到该站点的所有 ASP.NET 应用程序和子目录。

ASP.NET 应用程序根目录

Web.config

特定 ASP.NET 应用程序的 Web.config 文件位于该应用程序的根目录中,它包含应用于 Web 应用程序并向下继承到其分支中的所有子目录的设置。

ASP.NET 应用程序子目录

Web.config

应用程序子目录的 Web.config 文件包含应用于此子目录并向下继承到其分支中的所有子目录的设置。

客户端应用程序目录

应用程序名称.config

应用程序名称.config 文件包含 Windows 客户端应用程序(而非 Web 应用程序)的设置。

这段配置节的意思是(参考自MSDN,具体地址:

任务

如何:确保使用数据源控件时连接字符串的安全.aspx)

ProcessModel 元素

processModel 元素(ASP.NET 设置架构) 元素配置用于服务器(包括服务器上的所有 ASP.NET 应用程序)的处理模型。因此,processModel 设置只能放在 Machine.config 文件中,而且不能被任何 Web.config 文件中的设置重写。

processModel 元素的更改将只有在辅助进程重新启动之后才生效,而不是像其他配置元素那样在设置更改之后立即生效。

说明:

当 ASP.NET 以辅助进程隔离模式运行在 Internet 信息服务 (IIS) 6.0 中时,将使用 IIS 6.0 进程模型,并将忽略 Machine.config 文件的 processModel 节中的设置。若要配置进程标识、循环或其他进程模型值,请使用 IIS 管理器来配置应用程序的 IIS 辅助进程。将 IIS 6.0 配置为在 IIS 5.0 隔离模式中运行 ASP.NET 后,就不会运行 ASP.NET 2.0。

图片 7  运行时计算配置设置

当服务器接收对特定 Web 资源的请求时,ASP.NET 使用位于所请求 URL 的虚拟目录路径中的所有配置文件按层次结构计算该资源的配置设置。本地配置设置将重写父配置文件中的设置。

这些设置计算一次,随后将缓存以供后续请求使用。ASP.NET 自动监视对文件进行的更改,并在该文件的层次结构内的任何配置文件发生更改时重新计算缓存。当服务器收到对特定 URL 的请求时,ASP.NET 将使用缓存中的配置设置层次结构来找到所请求的资源。

除非配置节元素中包括 restartOnExternalChanges="false" 属性,或者配置设置包含在使用 configSource 属性链接到 Web.config 文件的单独文件中,否则当配置发生更改时,应用程序将重新启动。

图片 8  单个文件中配置的多个 ASP.NET 资源

当管理大量配置设置或者管理 ISP 设置中的客户端网站时,将多个位置的设置存储在一个 Web.config 文件中可能会非常有用。使用 location 元素的 path 属性,可以对存储在应用程序子目录中的多个特定的 ASP.NET 资源进行配置。

有关如何使用 location 元素的信息,请参见如何:使用位置设置配置特定目录。

图片 9  虚拟目录中的设置和物理目录中的设置发生冲突

虚拟目录的配置设置独立于物理目录结构,必须小心组织虚拟目录以防止出现配置问题。例如,您可能有一个具有如下物理目录结构且名为 MyResource.aspx 的 ASP.NET 文件。

)

复制代码

C:
    Subdir1
        Subdir2
            MyResource.aspx

另外,您还可能拥有一个位于 Subdir1 的配置文件、一个映射到 c:Subdir1 的名为 Vdir1 的虚拟目录以及一个映射到 c:Subdir1Subdir2 的名为 Vdir2 的虚拟目录。如果客户端使用 URL 访问物理位置为 c:Subdir1Subdir2MyResource.aspx 的资源,则该资源将从 Vdir1 继承配置设置。但是,如果客户端使用 URL 访问同样的资源,则该资源不从 Vdir1 继承设置。以这种方式创建虚拟目录可能会导致意外的结果,甚至会导致应用程序失败。建议您不要嵌套虚拟目录,如果不得不这样做的话,请只使用一个 Web.config 文件。

图片 10  限制 ASP.NET 继承

您可能希望限制配置设置的继承,以增强应用程序的性能、保持高可靠性并简化管理。限制功能由 allowOverridelockAttributeslockAllAttributesExceptlockAllElementsExceptlockItemlockElements 属性控制。有关这些属性的更多信息,请参见 节元素所继承的常规属性。

图片 11  未处理异常的配置设置

在创建 ASP.NET 应用程序的过程中,Aspnet.config 文件包含的设置由公共语言运行库 (CLR) 处理。这些设置与其他设置一起指示 CLR 应如何处理未处理异常。相关配置设置如下所示:

<legacyUnhandledExceptionPolicy enabled="false" />

  转自:

 

概念

使用连接字符串.aspx)
加密和数据访问.aspx)
Securing the User's Password.aspx)

启用 .NET Framework 2.0 版 运行时激活策略,这是通过使用最新支持的运行时加载所有程序集。

其他资源

保证 ADO.NET 应用程序的安全.aspx)
使用受保护的配置加密配置信息.aspx)

 

注意:由于config配置文件的特性,如果在config配置文件中存在configSections节点,则必须将configSections放在一个,否则会引发异常:配置系统未能初始化

 

 

 

在原来.NET2.0,.NET3.5的时候,由于程序运行环境本质还是.NET2.0,而到了.NET4.0由于整个程序集的版本更新,以前使用.NET2.0所编写的程序集与.NET4.0的程序集继续拧互操作的时候就会出现上面所说的兼容性问题。

 

通过MSDN,我们可以知道,startup配置节中的useLegacyV2RuntimeActivationPolicy属性是在.NET4.0中新增的,默认是false,表示:

 

使用默认的 .NET Framework 4 激活策略,该激活策略将加载 .NET Framework 4 通过使用公共语言运行时 (CLR) 版本 4 所创建的程序集,以及 CLR 早期版本通过使用受支持的低于版本 4 的最高 CLR 版本所创建的程序集。

 

 

 

现在如果当程序在.NET4.0环境下要使用.NET2.0及.NET3.5的程序时就必须将useLegacyV2RuntimeActivationPolicy设置为true,同时还要注意,需要在startup配置节的字节中添加supportedRuntime配置节,并指定为“v4.0”,表示使用.NET4.0运行时来运行程序。

 

 

 

有关更多startup及其子级可以查看MSDN:

 

startup:

 

supportedRuntime:

 

原文:

 

另外一篇:

今天在使用WebService时,编译项目出现了“混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。”错误提示,在项目中添加WebService的引用方式使用了两种,一种是添加“服务引用”,一种是添加“Web引用”。两种方式不一样,Web引用是基于.net framework 2.0的,而我的项目基于.net framework 4.0开发的。所以造成一个项目使用了2个版本的.net framework 。一编译就报“在使用.Net2.0和.Net4.0混合开发,启动应用程序时遇到了“混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。”这个错误提示。”。

解决方案如下:
在app.config中的configuration节内添加子节startup,详细如下:
<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku = ".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>
,之后完整的app.config看起来就像这样:
<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku = ".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
  </startup>
</configuration>

 

下面内容来自微软官方文档。

useLegacyV2RuntimeActivationPolicy属性,表示指定是否启用 .NET Framework 2.0 运行时激活策略,或者是否使用 .NET Framework 4 激活策略。

 

true,为所选运行时启用 .NET Framework 2.0 运行时激活策略,该策略要将运行时激活技术(如 CorBindToRuntimeEx 功能)绑定到从配置文件选择的运行时,而不是将它们盖在 CLR 版本 2.0 上。因此,如果从配置文件选择 CLR 版本 4 或更高版本,则使用 .NET Framework 的早期版本创建的混合模式程序集将与所选 CLR 版本一同加载。设置此值可防止 CLR 版本 1.1 或 2.0 加载到同一进程,有效地禁用进程中的并行功能。

 

false,使用 .NET Framework 4 及更高版本的默认激活策略,即允许旧式运行时激活技术将 CLR 版本 1.1 或 2.0 加载到进程。设置此值可防止混合模式程序集加载到 .NET Framework 4 或更高版本,除非他们内置有 .NET Framework 4 或更高版本。此值为默认值。

子元素:
 <requiredRuntime>指定应用程序仅支持公共语言运行时 1.0 版。 用运行时 1.1 版本或更高版本生成的应用程序应使用 <supportedRuntime> 元素。
 <supportedRuntime>指定此应用程序支持的公共语言运行时版本。 
 
备注:
<supportedRuntime> 元素应由使用运行时 1.1 版或更高版本生成的所有应用程序使用。 仅为支持运行时 1.0 版而生成的应用程序必须使用 <requiredRuntime> 元素。 

Microsoft Internet Explorer 中承载的应用程序的启动代码忽略 <startup> 元素及其子元素。 

useLegacyV2RuntimeActivationPolicy 特性
如果您的应用程序使用旧式激活路径,如 CorBindToRuntimeEx function(CorBindToRuntimeEx 功能),并且您希望这些路径激活 CLR 的版本 4(而不是较早的版本),或者如果您的应用程序是用 .NET Framework 4 生成的,但在使用较早版本的 .NET Framework 生成的混合模式程序集上有依赖项,则此特性将派上用场。 在这些方案中,将特性设置为 true。 

说明:
 
将该属性设置为 true 可以防止把 CLR 版本 1.1 或 CLR 版本 2.0 加载到同一进程,有效地禁用进程中的并行功能

示例
<!-- When used with version 1.0 of the .NET Framework runtime -->
<configuration>
   <startup>
      <requiredRuntime version="v1.0.3705" safemode="true"/>
   </startup>
</configuration>
<!-- When used with version 1.1 (or later) of the runtime -->
<configuration>
   <startup>
      <supportedRuntime version="v1.1.4322"/>
      <supportedRuntime version="v1.0.3705"/>
   </startup>
</configuration>

转自:

本文由10bet手机官网发布于高并发,转载请注明出处:运行时中加载该,配置文件层次结构和继承

上一篇:数据绑定的知识点,config配置连接字符串的方法 下一篇:没有了
猜你喜欢
热门排行
精彩图文