1.利用反射Assembly.LoadFrom() 动态加载程序集
static void Main()
{
// Load the assembly and create an Instance of MyAssembly.
Assembly aa = Assembly.LoadFrom("MyAssembly\\MyAssembly.dll")
Type a_t = aa.GetType("MyAssembly")
object o = Activator.CreateInstance(a_t)
// Invoke the GetDepAssembly method.
object ac = o.GetType().InvokeMember("GetDepAssembly", BindingFlags.InvokeMethod, null, o, new object[] {})
}
2.使用 <codeBase>元素。
只有在计算机配置文件或也重定向程序集版本的发行者策略文件中,才可以使用 <codeBase>元素。在运行库确定要使用哪一程序集版本时,它应用确定版本的文件中的基本代码设置。如果未指出基本代码,此帆那么运行库就以通常的方法探测程序集。有关详细信息,请参见运行库如何定位程序集。禅弯
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"//必需!程序集的名称
publicKeyToken="32ab4ba45e0a69a1" //sn -t FileNameKeyPublic.snk 得到该值
culture="en-us" />//可选,指定程序集的语言和国家/地区的字符串。一般是neutral
<codeBase version="2.0.0.0"//程序集版本AssemblyInfo.cs中配置,或在属性中配置。
href="http://www.litwareinc.com/myAssembly.dll"/>//程序集地址。
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
对于所有具有强名称的程序集,要求 version 属性,但对于不具有强名称的程序集应省略。<codeBase>元素要求 href 属性。在 <codeBase>元素中不能指定版本范围。
注意
如果为不具有强名称的程序集提供基本代码提示,那么该提示必须指向应用程序基或该应用程序基目录的子目录。
3.使用 <probing>元素。
运行库通过探测的方法来查找没有基本代码的程序集。有关探测的更多信息,请参见运行库如何定位程序集。
可以在应用程序配置文件中使用 <probing>元素,来指定在查找程序集时运行库应搜索的贺扒闷子目录。下面的示例说明如何指定运行库应搜索的目录。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="binbin2\subbinbin3"/>
</assemblyBinding>
</runtime>
</configuration>
privatePath 属性包含运行库应在其中搜索程序集的目录。如果应用程序位于 C:\Program Files\MyApp,那么运行库将在 C:\Program Files\MyApp\Bin、C:\Program Files\MyApp\Bin2\Subbin 和 C:\Program Files\MyApp\Bin3 中查找未指定基本代码的程序集。privatePath 中指定的目录必须是应用程序基目录的子目录。
相对下 <probing>没有<codeBase>灵活
4.还可以使用 .NET Framework 配置工具 (Mscorcfg.msc) 来指定程序集位置或者为公共语言运行库指定要探测程序集的位置。
我先说下你想要裂丛毁的结果,你把Assembly.LoadFrom换成Assembly.LoadFile即可。另外,你既然能够在你的应用中使用Assembly.LoadFrom这样的方法,那test1.dll他们的路径就是已知的了,何必还要通过反射程序集内部方法来获取它的Location呢?
如果你是将test1.dll注册到了全局环境中,那么我郑裤建议你不要使用LoadFrom和LoadFile,改用Load方法:将test1和test2通过版本号或者公钥(PublicKey)加以区别,然后用Load方肆备法调用。调用参数类似于:“程序集名,Version=版本1,culture=区域信息1,PublicKeyToken=公钥1”,这是微软标准的做法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)