方式一:占用文件的加载
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常用代码(一)