首页 > 其他分享 >.Net引用根目录子文件夹下的dll文件

.Net引用根目录子文件夹下的dll文件

时间:2023-01-03 11:14:12浏览次数:38  
标签:文件 DotSpatial dll GdalExtension 根目录 Net Data

在.Net开发的时候,有时候会引用一套库,这些库是由多个dll文件。正常情况下,这些dll文件需要拷贝到运行根目录下。如果这些dll文件比较多,加上其他直接引用的dll,这样会导致根目录下非常乱。我们希望可以把引用的这套库单独放在根目录下一个单独的文件夹中,让系统可以直接引用,该如何做呢?

例如我们想基于DotSpatial开发的时候,想直接使用该库的一个扩展DotSpatial.Data.Rasters.GdalExtension。GdalExtension中在DotSpatial中的位置如下图所示。

截图.png

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文件错误。如下图所示。

截图.png

要解决这个问题,我们就必须把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。如下图所示。

截图.png

设置后,在运行代码,就可以运行成功,如下图所示。

截图.png

我们跟踪下数据,确认已经读取成功,如下图所示。

截图.png

如果有多个类似的模块目录,那就使用;号隔开。App.config文件中,代码如下所示。

<probing privatePath="A\A_0;B;C\C_0;C\_1"/>

标签:文件,DotSpatial,dll,GdalExtension,根目录,Net,Data
From: https://www.cnblogs.com/mytudousi/p/17021449.html

相关文章

  • .NET性能优化-使用RecyclableMemoryStream替代MemoryStream
     提到MemoryStream大家可能都不陌生,在编写代码中或多或少有使用过;比如Json序列化反序列化、导出PDF/Excel/Word、进行图片或者文字处理等场景。但是如果使用它高频、......
  • Kubernetes监控手册09-监控ETCD
    写在前面ETCD是Kubernetes控制面的重要组件和依赖,Kubernetes的各类信息都存储在ETCD中,所以监控ETCD就显得尤为重要。ETCD在Kubernetes中的架构角色如下(只与APIS......
  • Kubernetes监控手册05-监控Kubelet
    上一篇我们介绍了如何监控Kube-Proxy,Kube-Proxy的/metrics接口没有认证,相对比较容易,这一篇我们介绍一下Kubelet,Kubelet的监控相比Kube-Proxy增加了认证机制,相对更复杂一些......
  • .NET性能优化-使用RecyclableMemoryStream替代MemoryStream
    提到MemoryStream大家可能都不陌生,在编写代码中或多或少有使用过;比如Json序列化反序列化、导出PDF/Excel/Word、进行图片或者文字处理等场景。但是如果使用它高频、大数据......
  • 【Packet Tracer】交换机Telnet远程登录配置
    1.什么是Telnet? 2.实验2.1拓扑图 (1)点击PC,分别配置PC0、PC1的IP地址/子网掩码   (2)点击交换机Switch0,选择CLI,进入命令行界面1>进入特权模式、全局配置模式......
  • virtualbox 上安装 esxi 6.7 不认识网卡( no network adapters)
    esxi6.7安装会有各种要求,CPU大于等于2颗,内存大于等于4G等等,还有就是网卡可能提示找不到,默认网卡类型不认识,选这个就行了: ......
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(1)-后端项目框架搭建
    前言:前面的四个章节我们主要讲解了MongoDB的相关基础知识,接下来我们就开始进入使用.NET7操作MongoDB开发一个ToDoList系统实战教程。MongoDB从入门到实战的相关教程......
  • kubenetes v1.25.0 升级 v 1.25.1
    升级K8s版本v1.25.0->v1.25.1:#升级之前v1.25.0:[root@k8s-master-1~]#kubectlgetnode-owideNAMESTATUSROLESAGEVERSIONI......
  • Kubernetes(k8s) kubectl annotate常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • Kubernetes 部署 ELK
    Kubernetes部署ELK项目背景k8s集群搭建后,平时运维过程中不仅要观察监控平台,查看集群运行情况,还要在集群出现问题时,对问题点进行及时定位,由于集群内pod过多后,日志定位比......