.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 ...
随机推荐
- OnionArch - 采用DDD+CQRS+.Net 7.0实现的洋葱架构
博主最近失业在家,找工作之余,看了一些关于洋葱(整洁)架构的资料和项目,有感而发,自己动手写了个洋葱架构解决方案,起名叫OnionArch.基于最新的.Net 7.0 RC1, 数据库采用Postgr ...
- Effective java 总结
用静态工厂方法代替构造器的最主要好处 1.不必每次都创建新的对象 Boolean.valueOf Long.valueOf 2.直接返回接口的子类型,对于外界来说并不需要关心实现细节,主要知道这个接口 ...
- 刷完一千道java笔试题的常见题目分析
java基础刷题遇到的最常见问题 可以先看一下这位博主整理的java面试题(很详细,我看了好几遍了):https://blog.csdn.net/ThinkWon/article/details/10 ...
- 前端框架Vue------>第一天学习、Vue学习的路径、Vue官网(1)
文章目录 1.学习目标 2.前端知识体系 2.1 前端三要素 2.2.MVVM 3.第一个Vue程序 4.Vue实例的生命周期 vue的官方文档:https://cn.vuejs.org/ 1.学习目 ...
- 三、Kubernetes调度
一.Kubernetes调度 Scheduler 是 kubernetes 的调度器,主要的任务是把定义的 pod 分配到集群的节点上.听起来非常简单,但有很多要考虑的问题: 公平:如何保证每个节点都 ...
- 一、Django介绍
一.Django介绍 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django.Django 是一个开放源代码的 Web 应用框 ...
- node 学习笔记 模块和包的管理与使用
1.前言 对于各种编程语言,代码组织是很重要的.而模块是node中的代码组织机制,node中的很多功能都以模块划分,而模块中又封装了许多方法,而且不会改变全局作用域,极大的方便了各开发者的需求. 2. ...
- 【深入浅出 Yarn 架构与实现】2-4 Yarn 基础库 - 状态机库
当一个服务拥有太多处理逻辑时,会导致代码结构异常的混乱,很难分辨一段逻辑是在哪个阶段发挥作用的. 这时就可以引入状态机模型,帮助代码结构变得清晰. 一.状态机库概述 一)简介 状态机由一组状态组成: ...
- Jenkinsfile Pipeline 使用 SSH 连接
前提 首先你需要将用到的 SSH 私钥保存到 Jenkins 的凭据中,这样你会获得一个 credentialId.这不是本文主要的内容,故不在此展开赘述,详情可参考官方文档:https://www. ...
- 【云原生 · Kubernetes】Taint和Toleration(污点和容忍)
个人名片: 因为云计算成为了监控工程师 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying Taint和Toleration(污点和容忍) 概念 添加多个tainit(污点) 使用例子 ...