.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 ...
随机推荐
- DevOps|高效能敏捷交付组织:特性团队(FeatureTeam)+Scrum
这是<研发效能组织能力建设>的第三篇.特性团队和Scrum,这两个定义我们在之前的文章中都详细介绍了.这两个组织模式或者说管理实践,我都用过所以有些时候特别有感触.书本上纯粹的模式很容易理 ...
- 腾讯云短信SDK-精简版
/** * 腾讯云短信SDK-精简版 * 本模块使用-向腾讯云短信服务器发送请求 * @return json 腾讯服务器返回值-json字符串 */ private function send_sm ...
- 1.Python面向对象基础
面向对象(OOP) 面向对象编程--object oriented programming 简写 OOP 面向过程和面向对象的区别: 面向过程: 1.把完成某一个需求的所有步骤从头到尾逐步实现 2 ...
- Cookie、Session、Token与JWT(跨域认证)
之前看到群里有人问JWT相关的内容,只记得是token的一种,去补习了一下,和很久之前发的认证方式总结的笔记放在一起发出来吧. Cookie.Session.Token与JWT(跨域认证) 什么是Co ...
- pod(七):静态pod
目录 一.系统环境 二.前言 三.静态pod 3.1 何为静态pod 3.2 创建静态pod 3.2.1 使用--pod-manifest-path指定静态pod目录 3.2.2 静态pod默认目录/ ...
- 【深入浅出 Yarn 架构与实现】2-2 Yarn 基础库 - 底层通信库 RPC
RPC(Remote Procedure Call) 是 Hadoop 服务通信的关键库,支撑上层分布式环境下复杂的进程间(Inter-Process Communication, IPC)通信逻辑, ...
- 这是不是你想要了解SQL的艺术,基础语法等等
一.基础sql语句: 模块定义 基础语句 基础功能 数据定义 create table 创建数据库表 drop table 删除数据表 alter table 修改表结构 create view 创建 ...
- .NET实现堆排序
堆排序及相关知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序.首先简单了解下堆结构. 堆 堆是具 ...
- 基于python的数学建模---蒙特卡洛算法
import math import random m = input('请输入一个较大的整数') n = 0 for i in range(int(m)): x = random.random() ...
- uniapp 微信小程序 配置分享朋友和朋友圈
uniapp 微信小程序 配置分享朋友和朋友圈 首先在小程序中配置微信分享,和微信朋友圈, onShareAppMessage, onShareTimeline 这两个API 和 onLoad 同级目 ...