动态加载库

2023-12-20

我有以下项目结构:

  1. Web API
  2. 类库A
  3. 类库B
  4. 类库C

这些是项目之间的参考

  • Web API直接引用A and B
  • B直接引用C

C有一个方法需要确保A被加载以通过反射使用其中定义的类型。

我的代码实际上如下

public class C {
    public void MethodCallingBType( string fullClassName ) {
        //e.g. "MyNamespace.MyType, MyNamespace"
        string[] parts = fullClassName.Split( ',' );
        var className = parts[0].Trim();
        var assemblyName = parts[1].Trim();
        if ( !string.IsNullOrEmpty( assemblyName ) && !string.IsNullOrEmpty( className ) ) {
            string assemblyFolder = Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location );
            string assemblyPath = Path.Combine( assemblyFolder, assemblyName + ".dll" );
            if ( File.Exists( assemblyPath ) ) {
                Assembly assembly = Assembly.LoadFrom( assemblyPath );
                Type type = assembly.GetType( className );
                result = Activator.CreateInstance( type ) as IInterfaceRunner;
            }
        }
    }
}

这段代码实际上不起作用Path.GetDirectoryName函数不返回有效路径。除此之外,我想创建一种更好的方法来确保B模块在查找其类型之前加载到内存中。

有什么建议吗?


简单的Assembly.Load不起作用?您不必知道位置,只需知道名称即可。

I use Assembly.CodeBase在同样的情况下,它工作得很好:

string codebase = System.Reflection.Assembly.GetExecutingAssembly().CodeBase;
Uri p = new Uri(codebase);
string localPath = p.LocalPath;
var myassembly = System.Reflection.Assembly.LoadFrom(System.IO.Path.Combine(localPath, "MyAssebmly.dll"));

此致, 彼得

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态加载库 的相关文章

  • 动态库使用静态库,出现未定义的符号

    我一直在寻找解决问题的方法 只是得到了一些线索 但我找不到任何一致的解决方案 我有一个动态库 libdyna so 的代码 它使用3个静态库 libone a libtwo a lib Three a 和log4cpp库的功能 当我第一次构
  • C++ 构造函数根据参数类型调用另一个构造函数

    我有这门课 class XXX public XXX struct yyy XXX std string private struct xxx data 第一个构造函数 使用结构 很容易实现 第二 我可以将一个字符串以特定的格式分开 解析
  • Linq Any 始终返回 true

    我已经使用 Linq to Entities 多年 但这是我第一次遇到这个问题 我有Tips and Items表 每个提示可以有很多项目 我的数据库中只有 3 个项目 编辑项目时 我想确保GivenId对于具有相同提示的项目 字段是唯一的
  • 安装/编译 pylzma(lzma python 绑定)

    我已经向作者提出了这个问题website http www joachim bauch de projects pylzma comment page 1 comment 5211 但我想我也可以在这里问 我一直在尝试使用以下设置安装 py
  • 预期在模拟中调用一次,但使用 Moq 时调用次数为 0 次

    我收到错误 在mock上调用一次 但是0次 下面是我的代码结构 public class GenerateAddress IGenerateAddress public GenerateAddress IAddress createAdd
  • 如何使用 CMake 链接多个库

    我有一些与 DCMTK 相关的代码 如果我从命令行使用 g 我可以成功构建并运行它 这是代码 include dcmtk config osconfig h include dcmtk dcmdata dctk h int main Dcm
  • 减少最大值并保存其索引

    int v 10 2 9 1 3 5 7 1 2 0 0 int maximo 0 int b 0 int i pragma omp parallel for shared v private i reduction max maximo
  • 除非我在开​​始时声明变量,否则为什么会收到“错误未声明的标识符”?

    当我有以下情况时 include stdafx h include
  • 对指针列表进行排序

    我再次发现自己在 C 中的一些非常简单的任务上失败了 有时我希望我能从 Java 中的 OO 中学到所有知识 因为我的问题通常是从像 Java 一样思考开始的 无论如何 我有一个std list
  • “双免”是什么意思?

    正如标题所暗示的那样 我是 C 语言的新手 并且很快就会有期中考试 我目前正在修改过去的论文 一个反复出现的主题是双重自由问题 我理解就是调用的过程free 在同一个内存位置两次 但我有几个问题我不能 100 确定如何回答 问题1 C中双重
  • 在 Visual Studio 2017 mac 上安装扩展 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试在 Visual Studio for Mac 上安装 Visual Studio Marketplace 扩展 但是 Vi
  • WiX 安装程序在 vs 2012 上不起作用

    我想为我的应用程序创建一个安装程序 我已经下载了 WiX 3 6 并将其安装在 vs 2012 上 创建简单的winform应用程序 将 WiX 安装项目添加到我的解决方案中 右键单击参考并将我的 winform 应用程序添加到安装程序的参
  • OpenFileDialog 中的多个文件扩展名

    如何在一组中使用多个文件扩展名OpenFileDialog 我有Filter BMP bmp GIF gif JPG jpg PNG png TIFF tiff 我想创建组 以便 JPG 为 jpg 和 jpeg TIFF 为 tif 和
  • 设置了 OFN_ALLOWMULTISELECT 标志的 GetOpenFileName()

    我正在尝试使用 GetOpenFileName 通用对话框调用来弹出打开对话框并允许用户选择多个文件 我设置了 OFN ALLOWMULTISELECT 标志 并设置了 OFN EXPLORER 因此我得到了 新样式 文件选择框 当我设置
  • 基于 C++ 组件的类

    Hi 我正在使用容器编写一个基于组件的类 但是在考虑了许多不同的方法之后 我找不到真正符合我想要的方法 这是总体思路的一个例子 我已经写的代码 Abstract class Component class Component public
  • 获取上下文菜单的控制

    我有一个如下所示的上下文菜单 A 1 2 3 选择 1 2 或 3 后 我需要访问调用上下文菜单的对象 意思是如果这是 textbox1 的上下文菜单 那么我需要访问该对象 我该怎么做 忘了说了 这是一个WPF应用程序 所以我使用 Syst
  • 如何打开 Outlook 已接收和阅读电子邮件

    我们有 5 个人 使用同一封电子邮件通过 Outlook 回复客户 我想设计一个程序来打开所有已发送的电子邮件 阅读它们 打开它们 找到第一个人的签名 并在他 她的计数器中添加一个数字 以便我可以得出一些统计数据 关于如何打开 Outloo
  • 如何在 C 中将 int 和数组保存在共享内存中?

    我正在尝试编写一个程序 让子进程在 Linux 上相互通信 这些进程都是从同一个程序创建的 因此它们共享代码 我需要它们能够访问两个整数变量以及一个整数数组 我不知道共享内存是如何工作的 我搜索过的每一个资源除了让我困惑之外什么也没做 任何
  • 类型与创建 CLR 存储过程不匹配

    我在程序集中有一个如下所示的方法 namespace MyNameSpace public class MyClass Microsoft SqlServer Server SqlProcedure public static void M
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了

随机推荐

  • 如何使用 Visual Studio 2010 在 Win32 项目中隐藏控制台窗口

    我需要在应用程序启动期间创建一个没有控制台窗口或 任何其他窗口 的 exe 应用程序 为此我尝试了以下方法 使用 Visual Studio 2010 创建一个 Win32 控制台应用程序作为空项目 向项目添加头文件 stdafx h 向项
  • 如何使用 Selenium 和 C# 识别具有 href 属性的元素

    我在选择 href 时遇到问题 a title Population and Immigration Authority href https www gov il en Departments population and immigra
  • Android:notifyDataSetChanged被调用但ListView未更新

    我得到了这个 ListView 它是从网络上的 JSON 数据填充的 但是当我更新 JSON 条目时 例如添加新条目 ListView 不会更新 即使我已经调用了notifyDataSetChanged 它也不会在列表中显示新条目 这是我的
  • 在 System.Data.SQLite 中创建/使用用户定义的函数?

    用户定义的函数和整理序列 对用户定义函数和整理序列的完全支持意味着 在许多情况下 如果 SQLite 没有某个功能 您可以用您最喜欢的 NET 语言自行编写它 编写 UDF 和整理序列从未如此简单 我在 C 上发现了这一点SQLite AD
  • 如何找到 0 - 100 之间的质数?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 在 Javascript 中 我如何找到 0 100 之间的素数 我想过 但我不知道如何找到它们 我想过做 x x 但我发现了
  • 避免同一缓存区域的多次重新填充(由于并发)

    我有一个高流量的网站 我使用休眠 我还使用 ehcache 来缓存生成页面所需的一些实体和查询 问题是 并行缓存未命中 详细的解释是 当应用程序启动并且缓存区域变冷时 每个缓存区域都会被不同的线程填充多次 而不是仅一次 因为该站点被许多用户
  • ListView.getCheckedItemPositions 无法返回 SparseBooleanArray 中的选中项

    我正在尝试读取包含多个的列表中的联系人checkboxes 但是当我打电话给sparsebooleanarray 它只是为所有列表条目返回 false 即使对于已检查的条目也是如此 我调查了这个线程为什么 ListView getCheck
  • 为多个服务器加密 web.config 数据

    我需要为客户端加密 web config 文件的部分内容 我见过的大多数参考文献都是使用 aspnet regiis 进行加密 但是 据我所知 这需要在托管该站点的 Web 服务器上进行 这意味着每个服务器的加密值都不同 我无权访问该客户端
  • 我可以将嵌入的 Base64 编码字体转换为字体文件吗?

    我有一个 font face 规则 它看起来像这样 font face font family F src url format embedded opentype url data application x font woff char
  • 为什么 Python 枚举中的可变值是同一个对象?

    在尝试不同的值类型时Enum成员们 当值可变时 我发现了一些奇怪的行为 如果我定义一个值Enum作为不同的列表 成员的行为仍然与Enum值是典型的不可变类型 例如str or int 即使我可以更改现有成员的值 以便两个值Enum成员相同
  • AngularJS For 循环与数字和范围

    Angular 确实为在 HTML 指令中使用数字的 for 循环提供了一些支持 div do something div 但是 如果您的作用域变量包含具有动态数字的范围 那么您每次都需要创建一个空数组 在控制器中 var range fo
  • Pandas GroupBy:如何根据列获取前n个值

    如果这是一个基本问题 请原谅我 但我是熊猫新手 我有一个带有 A 列的数据框 我想根据 A 列中的计数获取前 n 行 例如 原始数据看起来像 A B C x 12 ere x 34 bfhg z 6 bgn z 8 rty y 567 hm
  • 在 BigQuery 中使用 _TABLE_SUFFIX 时无法识别名称“列”

    我有以下 BigQuery 数据集 一组带有名称的表keywords ab keywords ac keywords zz 另一组带有名称的表keywords different schema ab keywords different s
  • 异常:类型“String”不是类型“Map”的子类型

    异常 类型 String 不是类型 Map 的子类型 collection data id 1 name Marko picture https lh3 googleusercontent com a AAuE7mC1vqaKk Eylt
  • 无法在 kivy 中打开窗口[重复]

    这个问题在这里已经有答案了 我开始在我的游戏中使用 kivy 因此在遵循一些在线教程时 python shell 返回这些错误 INFO Logger Record log in C Users kivy logs kivy 18 10 2
  • Powershell - 用户映射 SQL Server 2012

    我正在尝试为不同的登录帐户编写用户映射脚本 我已经编写了用户和单个服务器角色的创建脚本 但我不知道如何使用 Powershell 设置用户映射 我还需要设置Database Role membership 尤其 db backupopera
  • 为什么 Fortran 代码会出现分段错误?

    下面的 Fortran 代码出现分段错误 但是 当我修改print pow 10 8 i to print pow j i 它可以正常工作 不会出现分段错误 为什么 这很奇怪 module mdl implicit none integer
  • Xcode 变量

    在 Xcode 中 我知道你可以获得诸如PROJECT DIR在某些情况下使用 例如运行脚本构建阶段 我想知道是否可以获得构建类型 即 Release or Debug 有任何想法吗 最好的来源可能是苹果官方文档 http help app
  • Java 泛型在子类化时不兼容类型

    从泛型类类型 形式类型参数进行子类化时T E具有有效的类类型 实际类型参数 例如Type String出现多种组合 令人困惑的是该使用哪一种以及何时使用 public class SubClass
  • 动态加载库

    我有以下项目结构 Web API 类库A 类库B 类库C 这些是项目之间的参考 Web API直接引用A and B B直接引用C C有一个方法需要确保A被加载以通过反射使用其中定义的类型 我的代码实际上如下 public class C