.Net引用根目录子文件夹下的dll文件
在.Net开发的时候,有时候会引用一套库,这些库是由多个dll文件。正常情况下,这些dll文件需要拷贝到运行根目录下。如果这些dll文件比较多,加上其他直接引用的dll,这样会导致根目录下非常乱。我们希望可以把引用的这套库单独放在根目录下一个单独的文件夹中,让系统可以直接引用,该如何做呢?
例如我们想基于DotSpatial开发的时候,想直接使用该库的一个扩展DotSpatial.Data.Rasters.GdalExtension。GdalExtension中在DotSpatial中的位置如下图所示。
DotSpatial.Data.Rasters.GdalExtension.dll文件为该扩展的主dll文件,其他的文件以及文件夹都是该主dll文件依赖的库和资源。DotSpatial中,系统通过AppManager类的LoadExtensions函数,加载执行目录下的扩展库,加载栅格数据是,根据扩展名,可以自动调用GdalExtension模块。
如果我们不调用AppManager类的LoadExtensions函数,而直接想使用GdalExtension?我们直接引用到Application Extensions\DotSpatial.Data.Rasters.GdalExtension目录下的DotSpatial.Data.Rasters.GdalExtension.dll文件,通过下面的代码调用其文件中的函数,代码如下所示。
GdalRasterProvider myGdalRasterProvider = new GdalRasterProvider();
IRaster demRaster = myGdalRasterProvider.Open(@"E:\SaudiTestData\028C_Data\028C_DEM_Slope.tif");
这样在运行到第一行代码的时候,系统就会报找不到依赖的dll文件错误。如下图所示。
要解决这个问题,我们就必须把Extensions\DotSpatial.Data.Rasters.GdalExtension文件夹的所有文件都拷贝到系统运行根目录下。这样还是回到了原来的解决方案,会导致根目录下文件非常混乱。
我们通过下面的方法解决该问题。
1、首先我们先配置App.config文件。代码如下所示。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Application Extensions\DotSpatial.Data.Rasters.GdalExtension"/>
</assemblyBinding>
</runtime>
</configuration>
在App.config文件中,在runtime节点中,添加assemblyBinding节点,并在该节点下添加probing节点,在属性privatePath设置要引用的dll文件所在的目录。
2、在引用DotSpatial.Data.Rasters.GdalExtension.dll文件的时候,拷贝到本地项设置为False。如下图所示。
设置后,在运行代码,就可以运行成功,如下图所示。
我们跟踪下数据,确认已经读取成功,如下图所示。
如果有多个类似的模块目录,那就使用;号隔开。App.config文件中,代码如下所示。
<probing privatePath="A\A_0;B;C\C_0;C\_1"/>
最新文章
- NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds
- 数据库之Group&#160;By用法
- JS字符串转换成json对象。。。。
- Entity Framework 第一篇
- JAVA SERVLET专题(下)
- Executing Raw SQL Queries using Entity Framework
- Java注解处理器(转)
- 使用Data Annotations进行手动数据验证
- mac下通过docker搭建LEMP环境
- 【HDOJ】1247 Hat’s Words
- 几种任务调度的 Java 实现方法与比较--转载
- javascript对象继承的实现
- 4部门明确软件IC产业企业所得税优惠政策
- 一篇搞定Python正则表达式
- PAT基础6-2
- 廖雪峰Java5集合-1Java集合简介-1Java结合简介
- 解题:国家集训队 Middle
- 关于NOIP的运行环境
- liunx网络基本命令
- C#操作Excel 单元格的格式处理[xyytIT]