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查找新的、重定向的程序集/版本。