.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"/>
.Net引用根目录子文件夹下的dll文件的更多相关文章
- 遍历文件夹及其子文件夹下的.pdf文件,并解压文件夹下所有的压缩包
		List<PDFPATH> pdfpath = new List<PDFPATH>(); List<string> ziplist = new List<st ... 
- 递归删除N天前的文件夹及子文件夹下的特定文件
		@echo offrem 设置被删除文件夹路径set SrcDir=D:\tmp\test\rem 设置文件保存天数set Days=2rem /p指定搜索文件的路径 /s 在子目录中搜索 /m 指定 ... 
- JAVA中删除文件夹下及其子文件夹下的某类文件
		##定时删除拜访图片 ##cron表达式 秒 分 时 天 月 ? ##每月1日整点执行 CRON1=0 0 0 1 * ? scheduled.enable1=false ##图片路径 filePat ... 
- Java 遍历指定文件夹及子文件夹下的文件
		Java 遍历指定文件夹及子文件夹下的文件 /** * 遍历指定文件夹及子文件夹下的文件 * * @author testcs_dn * @date 2014年12月12日下午2:33:49 * @p ... 
- Eclipse 启动Tomcat后web项目的classes的子文件夹中没有calss文件
		Eclipse 启动Tomcat后web项目的classes的子文件夹中没有calss文件. 经网上查得以下方法可解决 把properties属性里的java compiler-->buildi ... 
- Windows批量修改文件夹及子文件夹下文件的扩展名
		实例:将 D:/backup 目录下所有后缀名为 “.zip” 的文件替换为 “.exe” 后缀 bat批处理: @echo off rem 不显示执行过程 D: rem 切换至指定盘符 cd D:/ ... 
- BAT 遍历文件夹和子文件夹下所有文件
		echo off & color 0A ::指定起始文件夹 set DIR="%cd%" echo DIR=%DIR% :: 参数 /R 表示需要遍历子文件夹,去掉表示不遍 ... 
- FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有
		2018-11-05 19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ... 
- python批量删除子文件夹中的空子文件夹
		例如A文件夹下有许多子文件夹,我需要获得的是子文件夹中的图片,但是现在子文件夹中不光有图片,还混入了空的文件夹(在使用OpenImages工具箱的时候,按照检索的方式下载的图片文件中是带有label的 ... 
- asp.net(C#)读取文件夹和子文件夹下所有文件,绑定到GRIDVIEW并排序 .
		Asp部分: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyFiles ... 
随机推荐
- Hive之安装
			Hive安装 1. 依赖hadoop(另有hadoop安装文档) 执行程序运行在yarn上面,需要启动start-yarn.sh 2. 先安装MySQL MySQL安装详见数据库MySQL之安装:ht ... 
- js中通过正则表达式验证邮箱是否合法
			文章目录 1.效果展示 2.问题描述 3.代码实现 1.效果展示 2.问题描述 当用户在输入框输入邮箱后.点击验证邮箱按钮.系统给出提示信息. 3.代码实现 <!DOCTYPE html> ... 
- 4.httprunner-参数化和数据驱动
			前言 参数化在config中使用parameters关键字 httprunner2.x 是在testsuite中实现参数化 httprunner3.x 是在testcase中的config实现参数化 ... 
- 19.-哈希算法&注册登录
			一.哈希算法 哈希: 给定明文-计算出一段定长的-不可逆的值 定长输出:不管明文输入多少,哈希都是定长的 不可逆:无法反向计算出对应的明文 雪崩效应:输入改变,输出必然变 md5:32位16进制 ... 
- UE优化性能
			UE 优化 参考:风恋残雪的博客 Stat unit 启动一个非Debug的游戏进程 打开控制台输入 Stat UNIT .PC端 ` , Android 四指点击 正常的渲染状态: 名称 功能 Fr ... 
- go: can only use path@version syntax with 'go get' and 'go install' in module-aware mode
			一: 非gomod模式 需要在go文件目录下的src创建代码 但是后面的版本一般做项目部管理不适用上述方法 也不会出现 go: can only use path@version syntax wit ... 
- SCI简介和写作顺序
			一.SCI论文组成部分简介 一篇完整的 sci 论文主要包括以下几个主要的组成部分,从前往后依次分别是 Title 就是说这个文章的标题其次是 Abstract 也就是这个文章的摘要.接下来是 Int ... 
- 实战中的sudo提权漏洞的使用姿势(CVE-2021-3156)
			实战中的sudo提权漏洞的使用姿势 免责声明: 0x00 漏洞概述 0x01 漏洞原理 0x02 受影响版本 0x03 不受影响版本 0x04 漏洞复现(centos) 复现POC1: 复现POC2: ... 
- 关于model,modelsmanager,db以及phql之间关系的梳理
			摘要: model在前,db在model后面作为驱动支持.phql是phalcon自创的查询语言,主要特性是在sql语句中用模型名替代表名,其聪明地解析模型类,包括关联关系等,还支持参数绑定.mode ... 
- Ubuntu 20.04 开启root权限登陆、网卡配置
			个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying Ubuntu 20.04 开启root权限登陆.网 ... 
