C#:自定义程序集目录
假设我们有一个由一个可执行文件和5个库组成的应用程序。 通常所有这些都将包含在一个目录中,并且将从那里加载库。
是否有可能这样做,例如我可以在一个名为Lib的目录中拥有一些库,其余的名为Lib2? 这样应用程序目录只包含可执行文件本身,其他程序集将包含在各种逻辑目录中。
我怎样才能做到这一点? 我想知道如何加载程序集,以及如何使应用程序的构建将程序集放在正确的目录中。
您可以向app.config添加其他搜索路径,以查看其加载程序集。 例如
你可以在这里看到更多细节。
如果您想手动管理从何处获取组件,您有两种可能性:
-
处理AppDomain.AssemblyResolve事件(由SLaks描述)。 这是代码片段:
static void Main(string[] args) { ... AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); ... } static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) { string assembliesDir = "your_directory"; Assembly asm = Assembly.LoadFrom(Path.Combine(assembliesDir, args.Name + ".dll")); return asm; }
-
使用您自己的设置创建域(通过设置AppDomainSetup对象的ApplicationBase或PrivateBinPath属性)。
因此,如果您想继续在当前域中工作,则必须使用方法1。
要使程序集自动复制到您希望它们所在的文件夹,可以为所有引用设置Copy Local
为true,并进行构建后步骤以将它们移动到子目录中。
或者,您可以将Copy Local
设置为false,并将引用的DLL文件作为项目中的文件添加到相应的子目录中,并将Build Action
设置为Copy to output directory(这将保留子目录)
使运行时找到它们的最灵活方法是处理AppDomain.AssemblyResolve事件并使用Assembly.LoadFile手动加载程序集 。 您需要一些方法让您的代码知道哪些程序集在哪些目录中。
在您的评论中,您提到在运行时添加路径和位置。 是的,你可以,但你必须使用Assembly.Load(),可能还有reflection。
上述就是C#学习教程:C#:自定义程序集目录分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/997006.html