首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从指定位置而不是 GAC 加载引用的 dll?

从指定位置加载引用的 DLL,而不是从 GAC(全局程序集缓存)加载,可以通过以下几种方式实现:

  1. 使用程序集绑定重定向(Assembly Binding Redirection):在应用程序的配置文件(如app.config或web.config)中,可以通过配置<assemblyBinding>元素来指定程序集的加载方式。可以使用<probing>元素指定程序集的搜索路径,从而实现从指定位置加载引用的 DLL。具体配置方式可以参考微软官方文档:https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/assemblybinding-element
  2. 使用Assembly.LoadFrom方法:在代码中使用Assembly.LoadFrom方法可以加载指定路径的程序集。例如,可以使用以下代码加载位于指定路径的 DLL:
代码语言:csharp
复制
string assemblyPath = "C:\\path\\to\\your.dll";
Assembly assembly = Assembly.LoadFrom(assemblyPath);
  1. 使用AppDomain.AssemblyResolve事件:在应用程序的入口点(如Main方法)中,可以订阅AppDomain.CurrentDomain.AssemblyResolve事件,并在事件处理程序中根据需要的程序集名称,返回指定路径的程序集。例如:
代码语言:csharp
复制
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
    string assemblyPath = "C:\\path\\to\\your.dll";
    return Assembly.LoadFrom(assemblyPath);
};

以上是几种常用的方式,可以根据具体需求选择适合的方法来从指定位置加载引用的 DLL。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

无法加载 DLL xpstar.dll 或它引用一个 DLL。原因: 126(找不到指定模块。)。

需要复制数据库文件,把SQL服务停了,不使用脱机或者分离是觉得比较慢,结果就是再次重启服务后,SQL开始报错:   无法加载 DLL xpstar.dll 或它引用一个 DLL。...原因: 126(找不到指定模块。)。...1.有人通过这个xpstar.dll重新复制到SQL ServerBinn目录解决,我对比服务器目录下和我本机(正常SQL Server)目录下所有的xpstar.dll,   按照本机目下添加一遍没有解决.... 2.也有通过下载了SQLEXPRESS SP2补丁后,系统报错问题得到了修复。...3.使用SQL 安装包中修复功能解决问题,修复过程中SQL服务会暂停,大概二十分钟左右,修复完成后,SQL不再报错。 ?

2.2K31

解决T4模板程序集引用五种方案

如果要了解T4具体应用,则可以参考我文章《创建代码生成器可以很简单:如何通过T4模板生成代码?》(上篇)(下篇)。如果你编写T4模板,你不得不面对一个问题——如何引用一个程序集?...目录 一、添加程序集引用解决不了问题 二、将引用程序集安装到GAC 三、利用VSPublicAssemblies目录 四、指定程序集具体路径...所以,对于上面的T4模板,会出现如下编译错误。 ? 二、将引用程序集安装到GAC 其实我们有很多方式来解决这个问题,你首先想到肯定是将引用程序集安装到GAC中。...没错,这是一种解决方案,如果被引用程序集具有强签名的话。有一点需要注意是,T4模板引用某个安装于GAC程序集时候,在指令下不能指定文件扩展名(.dll)。...,在这种情况下你需要指定程序集文件所在位置,最直接的当然就是指定程序集文件绝对路径。

82170

Assembly.Load()方法,Assembly.LoadFrom()方法,Assembly.LoadFile()方法区别!

1,Assembly.Load()          这个方法通过程序集长名称(包括程序集名,版本信息,语言文化,公钥标记)来加载程序集,会加载此程序集引用其他程序集,一般情况下都应该优先使用...⑵如果程序集强名称没有正确指定GAC中找不到,那么通过配置文件中元素指定URL来查找 ⑶如果没有指定强名称或是在GAC中找不到,CLR会探测特定文件夹:      假设你应用程序目录是...2,Assembly.LoadFrom()           这个方法指定路径来加载程序集,实际上这个方法被调用时候,CLR会打开这个文件,获取其中程序集版本,语言文化,公钥标记等信息,把他们传递给...当然这个方法会加载此程序集引用其他程序集。     ...3,Assembly.LoadFile()           这个方法是指定文件来加载程序集,和上面方法不同之处是这个方法不会加载此程序集引用其他程序集!

2.5K10

.NET面试题系列 - .NET框架基础知识(2)

如果程序集中含有多个命名空间,则每个命名空间有自己IL和元数据(即托管模块)。多个托管模块合成一个程序集。CLR是和程序集一起工作不是和托管模块一起。...例如mscorlib.dllSystem命名空间,包含了.NET所有的基元类型。 一个程序集可以包括多个命名空间,反之则不行 Using引用对象是命名空间,不能是程序集。... .NET Framework 4 开始,全局程序集缓存默认位置为 %windir%\Microsoft.NET\assembly。...如果你打算将类库部署到GAC,一般来说,这个库应当被大量其他工程引用。 不能把可执行程序集部署到GAC。...问:也就是说你可以把VS帮你引用所有参考都删了? 答:是。这个程序只需要基础类库。 问:那你都删了之后,Console类型哪里来? 答:mscorlib.dll里来。

1.3K20

C#中反射解析及使用.

⑵如果程序集强名称没有正确指定GAC中找不到,那么通过配置文件中元素指定URL来查找     ⑶如果没有指定强名称或是在GAC中找不到,CLR会探测特定文件夹:     假设你应用程序目录是...2,Assembly.LoadFrom()     这个方法指定路径来加载程序集,实际上这个方法被调用时候,CLR会打开这个文件,获取其中程序集版本,语言文化,公钥标记等信息,把他们传递给 Load...当然这个方法会加载此程序集引用其他程序集。...3,Assembly.LoadFile()     这个方法是指定文件来加载程序集,和上面方法不同之处是这个方法不会加载此程序集引用其他程序集!    ...Assembly.LoadFrom则不一样,它会载入dll文件及其引用其他dll,比如上面的例子,def.dll也会被载入。

2K140

关于强命名程序集

如何部署强命名程序集( Strong Name Assembly )和 GAC    a)GAC 概念 如果一个 Assembly 要被多个应用程序访问,那么他就必须放在一个...GAC 作用就是提供给 CLR 一个已知的确定目录去寻找引用 程序集。    ...其实不是这样,在命令行下查看,你会发现它实际上包含很多子目录,子目录名字和程序集名称是相同,但它们都不是实际程序集,实际程序集位于程序集名对应目录下。...比如进入 GCFWK 子目录,我们会发现其中又有很多子目录。机器内每一个安装到 GAC GCFWK.dll 在 GCFWK 中都会有一个子目录。...首先, GAC 使得很多程序可以共享程序集,这整体上减少了使用物理内存;其次,我们很容易将一个新版程序集部署到  GAC 中,并通过一种发布者策略(差不多就是一种重定向方法,比如将原来引用版本为

63610

通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

如何在编译时加载两个相同程序集 如何同时调用两个两个相同命名空间和类型程序集?...第二种:对每个版本指定codeBase路径,然后分别放上不同版本程序集,这样就可以加载两个相同程序集。 如何同时调用两个两个相同命名空间和类型程序集?...,为了不再每次使用时候都复制一份,所以计算机上有一个位置专门存储这些我们都会用到程序集,叫做全局程序集缓存(Global Assembly Cache,GAC),这个位置一般位于C:\Windows...既然是共享存放位置,那不可避免会遇到文件名重复情况,那么为了杜绝该类情况,规定在GAC中只能存在强名称程序集,每当CLR要加载强名称程序集时,会先通过标识去GAC中查找,考虑到程序集文件名称一致但版本文化等复杂情况...那么,实例一个对象,CLR是如何将该对象所对应类型行为及信息内存位置(加载堆)关联起来呢?

2.7K63

程序员级别鉴定书(.NET面试问答集锦)

,代码加载所有dll,以及程序运行时使用所有变量内容。...但是,Ngen.exe 操作与 JIT 编译器操作有三点不同: · 它在应用程序运行之前不是运行过程中执行 MSIL 到本机代码转换。...· 它一次编译一个完整程序集,不是一次编译一个方法。 · 它将本机映像缓存中生成代码以文件形式持久保存在磁盘上。 如何在.NET CLR分代垃圾收集器管理对象生命周期?...拆箱就是引用类型转换为值类型,通常伴随着堆中复制对象实例操作 装箱就是值类型数据转换为Object类型引用对象 string 是值类型还是引用类型?...引用类型 XmlSerializer所使用“PropertySpecified”模式意义是什么?它试图要解决什么问题? 把不参与序列化对象标注出来,只序列化有用数据,不是序列化整个对象。

1.7K70

未能加载文件或程序集 Microsoft.ReportViewer.Common, Version=11.0.0.0

System.IO.FileNotFoundException: 未能加载文件或程序集“Microsoft.ReportViewer.Common, Version=11.0.0.0, Culture=...系统找不到指定文件。...neutral, PublicKeyToken=89845dcd8080cc91” 报错堆栈,意思是:客户端缺少了 Microsoft.ReportViewer.Common 文件, 然后我搜索整个计算机找到对应dll...文件后,还是报错,上网搜了好久, 缺少哪些文件或程序集,到程序开发计算机下找到对应烤到客户端程序启动目录下即可(项目烤到Bin\\Debug目录下) 只能用命令方式烤: 11.0.0.0 是版本号...\Microsoft.SqlServer.Types.resources.dll C:\ rdlc报表winform客户端配置安装是个麻烦事,老报错,记下,仅供参考!

1.5K60

通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?

,几尽每个项目都会引用,为了不再每次使用时候都复制一份,所以计算机上有一个位置专门存储这些我们都会用到程序集,叫做全局程序集缓存(Global Assembly Cache,GAC),这个位置一般位于...既然是共享存放位置,那不可避免会遇到文件名重复情况,那么为了杜绝该类情况,规定在GAC中只能存在强名称程序集,每当CLR要加载强名称程序集时,会先通过标识去GAC中查找,考虑到程序集文件名称一致但版本文化等复杂情况...,mscorlib.dll又由于其地位特殊,早在CLR初始化时候就已经被类型加载器自动加载至内存中,所以这行代码可以直接在内存中读取到类型方法信息。...我们可以在代码中创建和卸载应用程序域,域与域之间有隔离性,挂掉A域不会影响到B域,并且对于每一个加载程序集都要指定,没有在代码中指定域的话,默认都是加载至默认域中。...那么,实例一个对象,CLR是如何将该对象所对应类型行为及信息内存位置(加载堆)关联起来呢?

4.3K30

WCF集成COM+应用程序遇到问题

另外补充: 一般来说,将程序集(dll)安装到GAC中有以下两种方法: 1.手动将要安装部署dll文件拖至:\Windows\Assembly文件夹下 2.使用gacutil.exe...如在命令行输入:gacutil -i C:\Charles2008\COMPlusTest.dll GAC概念: 如果一个Assembly要被多个应用程序访问,那么他就必须放在一个CLR已确认目录下...它一般位于厦门目录下: :\Windows\Assembly\GAC GAC左右就是提供给CLR一个已知的确定目录去寻找引用程序集。...其实不是这样,在命令行下查看,你会发现它实际上包含很多子目录,子目录名字和程序集名称是相同,但他们都不是实际程序集,实际程序集位于程序集名对应目录下。...其实一个Assembly不只包含代码,还包含其他一些东西,如MANIFEST.里面就有有关引用信息。CLR找到引用DLL名称后是怎么去寻找呢?

65610

MICROSOFT REPORT VIEWER 2012之无法加载相关dll

本着程序员何必难为程序员原则,折腾出解决方案如下: 事实上,只需要找到相关dll就行,那么你需要找到以下dll: Microsoft.ReportViewer.WebForms.dll(VS安装目录下...ReportViewer目录,如D:\Program Files (x86)\Microsoft Visual Studio 11.0\ReportViewer,你可以项目引用这个dll属性中找到路径...Studio 11.0\ReportViewer) Microsoft.ReportViewer.Common.dllGAC,注意版本号为11.0.0.0) Microsoft.ReportViewer.ProcessingObjectModel.DLL...(GAC,注意版本号为11.0.0.0) Microsoft.SqlServer.Types.dllGAC,注意版本号为11.0.0.0) 如果你不知道如何GAC中导出DLL文件,那么可以看看这篇文章...: 导出你GAC Assembly中DLLS 获取到上述文件后,将其放到网站bin目录即可,报表就可以正常使用了,这样的话,即使迁移或者发布到其他服务器,也不需要安装任何文件了。

87050

Microsoft ReportViewer 控件类型版本兼容问题及解决方法

添加引用,因为项目的.Net框架版本是4.0,因此ReportViewer版本是9.0....但在错误提示中,显示是类型不兼容,它们类型确实一样,这就是困扰所在。 解决方法是,在工具箱中添加.Net 4.011.0版本ReportViewer,并使用该控件来显示报表。...原因在于,ReportViewer版本属性,不是在某个控件上指定,而是在所在页面中指定。因此,不能在一个页面中存在两个不同版本ReportViewer。...'c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\9.0.0.0__b03f5f7f11d50a3a\Microsoft.ReportViewer.WebForms.dll...因为ReportViewer引用报表以及数据源等,都存在版本兼容问题,都需要修改。

2.7K70

Oracle:ODP.NET Managed 小试牛刀

核心dll,就是common目录下Oracle.ManagedDataAccess.dll,不象ODP.NET以前版本,这次终于不用区分x86/x64版本了,不管是32位还是64位,都是同一个dll...至于manged/x64、managed/x86这二个目录,是用来向.NET x86或.NET x64GAC注册程序集,运行相关configure.bat后,会自动将common中Oracle.ManagedDataAccess.dll...放入GAC,这样在vs中添加引用时,能自动找到GAC相关命名空间 ?...运行了configure.bat机器上,应用程序bin目录下不必包括Oracle.ManagedDataAccess.dll,就能正常运行了。...注:configure.bat这一步是可选,添加引用时,完全也可以通过直接浏览Oracle.ManagedDataAccess.dll所在位置,将该dll复制到bin目录下.

82460
领券