C# 反射 依赖引用问题

问题描述

大家好现在项目A反射A1(A并没有引用A1)但A1引用了A2(A并没有引用A2)A1调用了A2中的方法构成了依赖引用byte[]b=File.ReadAllBytes(path+dll);b=File.ReadAllBytes(path+dll);Assemblyassembly=Assembly.Load(b);vara=assembly.GetReferencedAssemblies();vartypes=assembly.GetTypes();vartype=assembly.GetType("TW.Action1.Action1");varaction=(IJob)Activator.CreateInstance(type,true);vara=action.GetName()+action.Exectuce();在调用方法时会报找不到A2,如果想能执行怎么样才能把A3加载进来呀,谢谢

解决方案

解决方案二:
没有实例怎么调用啊。至少来个静态的也好。
解决方案三:
这个讨论中的方法应该可以解决:一下来自上面的帖子:Appdomainhasaneventwhichisfiredifitcan'tfindareference:AppDomain.CurrentDomain.AssemblyResolve+=newResolveEventHandler(CurrentDomain_AssemblyResolve);

Intheeventhandleryoucansearchfortheassemblymanually:AssemblyCurrentDomain_AssemblyResolve(objectsender,ResolveEventArgsargs){strings=@"C:lib"+args.Name.Remove(args.Name.IndexOf(','))+".dll";returnAssembly.LoadFile(s);}

解决方案四:
A不引用A1,能反射到A1?????
解决方案五:
如果你所谓的A反射A1A和A1不过是同一个命名空间下的2个类,那就没有疑问了你最好说清楚A,A1,A2都是些啥玩意
解决方案六:
问题都描述得不清楚
解决方案七:
我这个怎么感觉你是要A反射调用A1,A1反射调用A2的节奏啊,A2反射调用A3的节奏啊报找不到是你没将dll添加进bin目录
解决方案八:
引用2楼findcaiyzh的回复:

这个讨论中的方法应该可以解决:一下来自上面的帖子:Appdomainhasaneventwhichisfiredifitcan'tfindareference:AppDomain.CurrentDomain.AssemblyResolve+=newResolveEventHandler(CurrentDomain_AssemblyResolve);

Intheeventhandleryoucansearchfortheassemblymanually:AssemblyCurrentDomain_AssemblyResolve(objectsender,ResolveEventArgsargs){strings=@"C:lib"+args.Name.Remove(args.Name.IndexOf(','))+".dll";returnAssembly.LoadFile(s);}

非常感谢,已经解决,但是现在有个新问题,就是我在反射时可能面对不同版本的DLL,如果我把A1引用A2,B1也引用了A2,A1先反射程序正在执行,在这里我又反射B1但A2的版本发生了变化,想A1和B1同时调用A2的不同版本怎么做呀?
解决方案九:
非常感谢,已经解决,但是现在有个新问题,就是我在反射时可能面对不同版本的DLL,如果我把A1引用A2,B1也引用了A2,A1先反射程序正在执行,在这里我又反射B1但A2的版本发生了变化,想A1和B1同时调用A2的不同版本怎么做呀?你觉得这样做有意义吗如果程序运行中DLL变了,你还期待能获得正确的执行结果??
解决方案十:
而且A1如果正在调用A2,你这个DLL正在被占用,怎么可能被替换成新版本?

时间: 2024-09-15 20:50:26

C# 反射 依赖引用问题的相关文章

类反射 type-C#引用型变量声明后未实例化,怎么获取变量的ClassName

问题描述 C#引用型变量声明后未实例化,怎么获取变量的ClassName 1.有个自定义的Class叫A2.在别的类中引用后建了一个变量 A instance;3.此处变量instance是null,怎样在变量instance不实例化的情况下(即不进行instance=new A();)的情况下获得A的Type或者ClassName呢? PS:这么奇怪的要求,其实是想写个公用函数检查变量在使用前是否初始化过,如果未初始化过在公共函数中用类反射初始化. 解决方案 typeof(类型) 解决方案二:

机房重构之配置文件、反射和抽象工厂

    本次机房重构过程中用到了反射 + 配置文件,目的还是挺明确的:就是为了更换数据时方便,遵循开放 - 封闭原则,解决了可维护和可扩展的问题.      以下就重构机房登录为例来看看配置文件 + 反射的用法.机房收费系统登录用到的数据库表是 User_info 表(用户表).  下面看看配置文件 + 反射 + 抽象工厂在登录时访问数据库 User 表时的用法:      1. 先进行配置文件操作     步骤:( 1 )在 VS 资源管理器的项目 UI 中,打开App.config 文件.

asp.net 反射减少代码书写量_实用技巧

  复制代码 代码如下: public bool Add(Liuyan refmodel)    {        string sql = "insert into liuyan(name,phone,zhiwei,gongsi,addr,country,dianyou,content,adddate)values(@name,@phone,@zhiwei,@gongsi,@addr,@country,@dianyou,@content,@adddate)";        OleD

《Maven官方文档》-Maven依赖机制简介(一)

依赖机制是Maven最为用户熟知的特性之一,同时也是Maven所擅长的领域之一.单个项目的依赖管理并不难, 但是当你面对包含数百个模块的多模块项目和应用时,Maven能帮你保证项目的高度控制力和稳定性. 大纲:  传递性依赖 排除.可选依赖 依赖范围 依赖管理 导入依赖 系统依赖 传递性依赖 传递性依赖是Maven2.0的新特性.假设你的项目依赖于一个库,而这个库又依赖于其他库.你不必自己去找出所有这些依赖,你只需要加上你直接依赖的库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中.这

携程Android App的插件化和动态加载框架

携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实现细节,回顾携程Android App的架构演化过程,期望我们的经验能帮助到更多的Android工程师. 需求驱动 2014年,随着业务发展需要和携程无线部门的拆分,各业务产品模块归属到各业务BU,原有携程无线App开发团队被分为基础框架.酒店.机票.火车票等多个开发团队,从此携程App的开发和发布

《maven实战》学习笔记3——maven使用入门

说明 由于我目前所做的项目皆是java web项目,因此整个系统学习的过程也就以java web为基础. maven项目结构 根据maven约定,一个比较标准的maven java web项目,结合eclipse通常可以看到结构如下: src/main/java java主要代码存放目录 src/main/resources java配置文件存放目录 src/test/java java测试代码存放目录 JRE System Library jre中的一些jar包映射 Maven Depende

整合Acitiviti在线流程设计器(Activiti-Modeler 5.19)

1.概述前言 一直以来都是从事大量的工作流相关的项目,用过很多商用的工作流产品,包括国内与国外的,尽管商用的工作产品在UI操作上比较人性化,但个人用户觉得,这东西只需要一些初级用户,对于我们一直在为一些高级的客户提供一些专业的数据整合.流程梳理.系统间的数据穿透时,这些系统因为不开源,给项目的实施带来巨大的风险,在一些项目栽过跟头后,我更偏向于使用开源的平台了.但开源平台最大的难点是在于你是否有足够的技术人员来学习及掌握它,否则,它也一样面临项目实施失败的风险.后来在一些项目上使用JBPM4,A

整合Acitiviti在线流程设计器(Activiti-Modeler 5.18.0)

整合Acitiviti在线流程设计器(Activiti-Modeler 5.18.0) 1.概述前言 一直以来都是从事大量的工作流相关的项目,用过很多商用的工作流产品,包括国内与国外的,尽管商用的工作产品在UI操作上比较人性化,但个人用户觉得,这东西只需要一些初级用户,对于我们一直在为一些高级的客户提供一些专业的数据整合.流程梳理.系统间的数据穿透时,这些系统因为不开源,给项目的实施带来巨大的风险,在一些项目栽过跟头后,我更偏向于使用开源的平台了.但开源平台最大的难点是在于你是否有足够的技术人员

不要把配置文件放到你的 Git 代码仓库

我总是惊讶地发现在一些私有的 git 仓库中缺乏管理.查看一个 git 仓库与之达成新的约定是我最恐惧的时刻之一.诚然,git 仓库中包含的文件应该是有个范围的.这可以优化开发和部署. 提交附加文件可显著提高下载(克隆一个仓库时)的时间,避开提交这些文件还有很多理由.非技术的发起人,可以使用这个原则作为指导,以确保你的团队是在聪明地提交代码. 编译后生成的文件/二进制文件 不要在一个 git 资源库中将你编译后生成的文件或者二进制文件包含进去!二进制文件 (或者可执行文件) 几乎总是将和操作系统