C#配置私有程序集

by shinichi_wtn 2010-10-25 20:38
在《C#动态程序集的加载、创建实例、序列化与反序列化》中讲到了,.NET程序在运行时默认只加载与主程序在同一目录的程序集,而如果我们把一些dll放到了其他我们自定义的内层文件夹中,就无法探测到。之前的文章是为了动态反序列化而通过AppDomain里的AssemblyResolve事件来手动加载需要的程序集,但更常见的应用是我们希望定义多个子目录来把相关类库进行更好的区分,而在程序运行时又能自动加载这些目录里的程序集,这就需要用到C#配置文件中的私有文件夹配置方法。
我们可以在项目中创建app.config文件来配置私有程序集,比如我们把软件的模块都放在了一个子目录Modules里面,要使CLR能探测到这个文件夹,只需要如下配置config文件
<configuration>

    <runtime>

        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

            <probing privatePath="Modules"></probing>

        </assemblyBinding>

    </runtime>

</configuration>
其中privatePath就对应了相应的子目录名称。需要注意的是,privatePath不能指定绝对路径。另外,privatePath还可以指定多个子目录,只需用分号分开即可,比如
<probing privatePath="Modules; Modules\Datas; Modules\Services"></probing>
这样,程序运行过程中,CLR会主动去探测Modules,Modules\Datas和Modules\Services这个三个子目录 。

Tags: ,

C#

(仅用于Gavatar)

  Country flag

biuquote
  • Comment
  • Preview
Loading

About

shinichi_wtnI'm Shinichi_wtn

Software Engineering Manager at Microsoft

[More...]


Month List