首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态加载库

动态加载库
EN

Stack Overflow用户
提问于 2016-02-28 12:10:26
回答 2查看 5K关注 0票数 0

我的项目结构如下:

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

这些是项目之间的参考资料。

  • Web API直接引用AB
  • B直接引用C

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

我的代码实际上如下所示

代码语言:javascript
复制
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模块类型之前将其加载到内存中。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-28 12:23:54

简单的Assembly.Load不工作吗?你不需要知道地点,只知道名字。

我在相同的情况下使用Assembly.CodeBase,它运行得很好:

代码语言:javascript
复制
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"));

向你问好,彼得

票数 4
EN

Stack Overflow用户

发布于 2018-06-20 11:53:04

修改Peter的答案,但逻辑更正确,因为他的组合将失败,没有理由创建URL来获取本地文件路径。

代码语言:javascript
复制
using System.Reflection;
using System.IO;

var appDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var myAssembly = Assembly.LoadFrom(Path.Combine(appDir, "MyAssebmly.dll"));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35682347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档