首页 > 编程语言 >C# 引用程序集编译在非同级目录实现

C# 引用程序集编译在非同级目录实现

时间:2024-04-25 10:44:05浏览次数:27  
标签:同级 C# 程序 dll 编译 引用 DLL 目录 加载

情景:A项目是主项目,B项目是引用程序集,

众所周知C#项目引用程序集编译时会生成在同一目录
如果想让A.exe和B.dll生成不在统一目录,但是又存在依赖关系应该怎么做呢?

实现原理分为两步
1、配置生成逻辑 2、动态加载DLL

1、配置生成逻辑:

打开A.csproj文件,找到

<ProjectReference Include="..\B\B.csproj">
	此处省略
</ProjectReference>

将该标签内的配置改为

<ProjectReference Include="..\B\B.csproj">
      <Private>false</Private>
      <ExcludeAssets>runtime</ExcludeAssets>
</ProjectReference>

此时A可以引用B程序集,并可以使用强类型声明

2、动态加载DLL:

public App()
{
    //订阅DLL加载失败事件,强类型声明未引用则在运行时会报错找不到DLL
    AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    //获取当前A程序路径
    string currentDirectory = Directory.GetCurrentDirectory();
    //获取API文件夹下的B.dll路径
    string dllPath = Path.Combine(currentDirectory, "API\\B.dll");
    //动态加载DLL
    Assembly assembly = Assembly.LoadFrom(dllPath);
    return (assembly);
}
此时即可达成我们想实现的目的,A.exe在根目录,B.dll在API/B.dll目录,
并存在依赖关系,可强类型声明

标签:同级,C#,程序,dll,编译,引用,DLL,目录,加载
From: https://www.cnblogs.com/Stay627/p/18157051

相关文章

  • CDN红利期,市场呈现出多元化的竞争格局
    随着互联网的迅猛发展,企业和个人对网站性能、网速和安全性的要求日益提升。内容分发网络(CDN)作为一种有效解决这些问题的技术手段,其应用日益广泛。而边缘计算的兴起,为CDN的发展注入了新的活力,使其焕发更加耀眼的光芒。边缘计算则是一种将计算、存储和应用执行等功能推向网络边缘的......
  • Flink CDC全量和增量同步数据如何保证数据的一致性
    ApacheFlink的ChangeDataCapture(CDC)功能主要用于实时捕获数据库中的变更记录,并将其转换为事件流以供下游处理。为了保证全量和增量数据同步时数据的一致性、不丢失和不重复读取,FlinkCDC采用了以下策略:一、保证一致性与不丢失1、使用事务当进行全量或增量同步时,Flink......
  • 如何查看eclipse版本
    进入eclipse文件夹点击readme 点击readme_eclipse.html 所跳转页面中release后的数字就是eclipse版本了   参考——https://www.php.cn/faq/420634.html......
  • 使用 NestJS 和 qrcode.js 创建 QR 码生成器 API
    前言QR码(QuickResponseCode)是一种二维码,于1994年开发。它能快速存储和识别数据,包含黑白方块图案,常用于扫描获取信息。QR码具有高容错性和快速读取的优点,广泛应用于广告、支付、物流等领域。通过扫描QR码,用户可以快速获取信息和实现便捷操作,为现代生活带来便利。在本教程中,小编......
  • 使用spring cloud loadbalancer 替代ribbon
    简介springcloudloadbalancer是spring自家推出的负载均衡器,可以平替ribbon。springcloudloadbalancer+RestClientRestClient是springframework6.1(对应springboot3.2)里内置的一个httprestapi调用器。相比RestTemplate,RestClient的链式写法使用起来十分流畅丝滑。s......
  • docker - [10] 容器数据卷
    将应用和环境打包成一个镜像,然后发布启动就成为一个容器了。 一、什么是容器数据卷  容器数据卷(ContainerDataVolumes)是Docker管理的一种特殊类型的存储区域,它为容器提供了一种持久化数据、共享数据以及与宿主机或其他容器之间进行数据交互的有效方式。  如果数据都......
  • C++数组的连续性
    虚拟上连续,物理上大概率连续,除非不在同一个物理页上,并且物理页不连续时数组在物理地址空间是否连续,对于用户空间的程序是不需要关心的。另外,对于一个抽象层次很高的编程语言,数组是不是一定要保证虚拟地址空间连续,感觉也是可以研究的。例如,java的数组就不连续?所以array到底是在......
  • Vue3——tdesign-vue-next如何按需加载动态渲染ICON
    前言如题,在vue3中进行按需加载来动态的渲染icon图标;在线案例:https://stackblitz.com/edit/9ufmeo?file=src%2Fdemo.vue内容<template><t-spacedirection="vertical"><t-spacebreak-linev-for="(item,index)iniconList":key="index"&......
  • cdf图和误差棒图
    CDF图(累积分布函数图)和误差棒图是两种完全不同的统计图形,它们各自展示了数据的不同方面。CDF图(CumulativeDistributionFunction):CDF图表示的是一个变量的所有可能值及其相应的累积概率。它展示了数据点在某一值或更小值出现的概率。CDF图用于展示数据的分布情况,比如你可以......
  • 前端面试题 - 在HTML5中DOCTYPE的作用是什么?标准与兼容模式(混杂模式)各有什么区别?
    #前端面试题-在HTML5中DOCTYPE的作用是什么?标准与兼容模式(混杂模式)各有什么区别?DOCTYPE(文档类型声明)是一种在HTML文档中使用的标记,用于告诉浏览器使用哪个HTML版本解析文档。它的作用是确保浏览器正确地渲染和显示网页内容。标准模式(严格模式)和兼容模式(混杂模式)是浏览器根......