管理控制(配置)

1. 在应用程序目录放入一个配置文件,安装程序会将配置文件安装到应用程序的基目录,从而实现对程序的管理控制

2. 配置文件包含XML代码,它既能和应用程序关联,也能和机器关联

3. XML配置文件的名称和位置取决于应用程序的类型

  • 对于可执行应用程序,配置文件必须在应用程序的基目录,而且必须采用EXE文件全名作为文件名,再附加.config扩展名
  • 对于Web窗体应用程序,文件必须在Web应用程序的虚拟根目录中,而且总是命名为Web.config。除此之外,子目录可以包含自己的Web.config,而且配置设置会得到继承

4. 举例:假定我们想把MultiFileLibaray的程序集文件部署到和应用程序集文件不同的目录,要求目录结构如下:

由于MultiFileLibaray的文件不在应用程序的根目录,所以CLR无法定位并加载这些文件。运行程序将抛出system.io.filenotfoundexception异常。若要解决该问题,可以在配置文件中配置,把它部署到应用程序的基目录

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="AuxFiles" />
    </assemblyBinding>
  </runtime>
</configuration>

可以为probing元素的privatePath特性指定多个以分号分隔的路径,注意,每个路径都相对于应用程序基目录。

配置设置既可以应用于程序,也可应用于机器。.net freamwork在安装时会创建一个Maching.config。

XML文件为CLR提供了丰富的信息。 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <!--probing:查找弱命名程序集时,CLR检查应用程序基目录下的AuxFiles和bin\subdir子目录。
      对于强命名程序集,CLR检查GAC或者由codeBase元素指定的URL。只有在codeBase元素时,
      CLR才会在应用程序的私有路径中检查强命名程序集-->
      <probing privatePath="AuxFiles;bin\subdir" />
      <!--dependentAsseambly,assemblyIdentity和bindingRedirect元素:查找由控制着公钥标记xxxxx的组织发布的、
      语言文化为中性的SomeClassLibrary程序集的1.0.0.0版本时,改为定位同一个程序集的2.0.0.0版本-->
      <dependentAsseambly>
        <assemblyIdentity name="SomeClassLibrary" publickeyToken="xxxxxxxxx" culture="neutral" />
        <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
        <!--codeBase:查找由控制着公钥标记xxxxx的组织发布的、 语言文化为中性的SomeClassLibrary程序集
        的2.0.0.0版本时,尝试在以下url处发现它-->
        <codeBase version="2.0.0.0" href="http://www.Wintellect.com/SomeClassLibrary.dll" />
      </dependentAsseambly>
      <!--dependentAsseambly,assemblyIdentity和bindingRedirect元素:查找由控制着公钥标记xxxxx的组织发布的、
      语言文化为中性的SomeClassLibrary程序集的包括3.0.0.0-3.5.0.0版本时,改为定位同一个程序集的2.0.0.0版本-->
      <dependentAsseambly>
        <assemblyIdentity name="TypeLib" publickeyToken="xxxxxxxxx" culture="neutral" />
        <bindingRedirect oldVersion="3.0.0.0-3.5.0.0" newVersion="4.0.0.0" />
        <!--publisherPolicy:如果生成TypeLib程序集的组织部署了发布者策略文件,CLR应忽略该文件-->
        <publisherPolicy apply="no" />
      </dependentAsseambly>
    </assemblyBinding>
  </runtime>
</configuration>

 编译方法时,CLR判断它引用了哪些类型和成员。根据这些信息,“运行时”检查进行引用的程序集的AssemblyRef表,判断程序集生成了哪些程序集。然后,CLR在应用程序配置文件中检查程序集/版本,进行指定的版本号重定向操作。随后,CLR查找新的、重定向的程序集/版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值