方式一:占用文件的加载

Assembly assembly = Assembly.Load(path);
用上面的方法可以动态的加载到dll,但是用这种方法加载到的dll一直到程序运行结束都是占用的dll文件,在此期间不能够对dll文件进行升级,或者修改.

方式二:不占用文件的方式

Assembly ab = Assembly.Load(File.ReadAllBytes(path));

首先把dll加载到内存中,然后在在加载成Assembly ,这样的话,dll完全跟程序解耦了,只要加载完成,你就是把dll给删除了,程序也一样照常运行。

有时候,需要将被引用的程序集放到单独的目录统一维护(如更新等),提供给多个项目使用到这些程序集。

我们知道,项目在添加了对程序集的引用后,编译时通常会将引用的程序集一起生成到bin或release目录。现在为了统一管理,我们把这些要引用的程序 集放到一个公共的目录,供多个项目使用,同时我们移除掉bin或release目录下的这些dll文件。默认情况下,程序运行过程中需要加载一个程序集, 会先后从系统目录和程序运行目录查找要加载的dll文件,如果都没有查找到,将会抛出一个异 常:System.IO.FileNotFoundException: 未能加载文件或程序集“Accessibility, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxx”或它的某一个依赖项。系统找不到指定的文件。

现在我们通过注册 AppDomain.CurrentDomain.AssemblyResolve 事件,在事件处理程序中根据args.Name和我们指定的目录重新构建dll文件路径,加载程序集并返回。这样实现在程序集加载不成功的情况下,转到我们指定的目录加载程序集。

以下代码即实现运行时控制从指定路径加载dll:

static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}

static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string module = new AssemblyName(args.Name).Name;
string dll = Path.Combine("d:\\AssemblyDir",string.Format("{0}.dll",module));
return Assembly.LoadFrom(dll);
}

方式一:占用文件的加载Assemblyassembly=Assembly.Load(path);用上面的方法可以动态的加载到dll,但是用这种方法加载到的dll一直到程序运行结束都是占用的dll文件,在此期间不能够对dll文件进行升级,或者修改.方式二:不占用文件的方式Assemblyab=Assembly.Load(File.ReadAllBytes(path));首先把dll加载到内存中,然后在在加载成Assembly,这样的话,dll完全跟程序解耦了,只要加载完成,你...
在设计模式的策略模式中,需要 动态 加载 程序 集信息,本文通过一个简单的实例,来讲解 动态 加载 Dll需要的知识点。 涉及知识点: Assembly Name类,完整描述 程序 集的唯一标识, 用来表述一个 程序 集。 Assembly 类,在System.Reflection命名空间下,表示一个 程序 集,它是一个可重用、无版本冲突并且可自我描述的公共语言运行时应用 程序 构建基块。 Module 类 表述在模块上执行反射,表述一个 程序 集的模块信息。 Type类,在System命名空间下,表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。
这几天学习Prism,看了下帮组文档和 程序 。在Prism中专门讲解模块化 程序 开发的有俩个列子,一个是用Unity解耦实现Prism的依赖注入,另一个列子是用MEF解耦是实现Prism的依赖注入。 案例(一):ModularityWithUnity.Silverlight 开启应用 程序 (1)App.xaml.cs中  private void Applicatio...
Assembly 表示一个 程序 集,它是一个可重用、无版本冲突并且可自我描述的公共语言运行时应用 程序 构建基块。(大概就是一组dll?)   继承 Object -> Assembly 派生 System.Reflection.Emit. Assembly Builder   实现 ICustomAttributeProvider, ISerializable   使用 Assembly 加载 程序 集、浏览 程序 集的元数据和构成部分、发现 程序 集中包含的类型以及创建这些类型的实例。 //通过此方法读取可以解决dll被 占用 问题 byte[] fileData = File.ReadAllBytes(dllPath); Assembly asm = Assembly . Load (fileData); 但此方法不会...
System.IO.IOException: 文件 “D:\RS\RS_CCVI20111210.exe”正由另一进程使用,因此该进程无法访问该 文件 。 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRight...
最近研究设计模式,在学习Terrylee老师的AbstractFactory的时候用到了反射,顺便也研究了一下 C# 的反射机制。收集了网上的一些资料和我个人的理解,供大家学习 在 C# 中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System.Reflection命名空间 (1) AppDomain:应用 程序 域,可以将其理解为一组 程序 集的逻辑容器...
mvn install:install-file -Dfile=path/to/maven- assembly -plugin.jar -DgroupId=org.apache.maven.plugins -DartifactId=maven- assembly -plugin -Dversion=3.3. -Dpackaging=jar 其中,path/to/maven- assembly -plugin.jar是该插件的路径,您需要将其替换为实际路径。如果您已经安装了该插件,但仍然找不到,请检查您的Maven配置是否正确。
Reading the request body timed out due to data arriving too slowly. See MinRequestBodyDataRate CSS常用代码(一)