在运行时以编程方式添加 DLL

发布于 2024-10-12 02:05:34 字数 112 浏览 3 评论 0原文

我使用 C# 在运行时创建了一个 DLL,现在我想在运行时将其添加为对我的项目的引用。

我尝试使用 LoadFrom 方法,但它不起作用。

我该怎么做?

Using C#, I create a DLL at runtime and now I want to add it as a reference to my project at runtime.

I tried using the LoadFrom method, but it doesn't work.

How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

虐人心 2024-10-19 02:05:34

首先您应该加载 dll

Assembly assembly = Assembly.LoadFrom("dllPath");

然后您可能需要将程序集添加到应用程序域

AppDomain.CurrentDomain.Load(assembly.GetName());

之后您可以从此程序集中加载任何类型

Type t = assembly.GetType("typeName");

然后使用反射您可以在此类型上执行方法

请注意您可能需要在配置中添加以下内容文件。

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="dlls folder"/>
  </assemblyBinding>
</runtime>

First you should load the dll

Assembly assembly = Assembly.LoadFrom("dllPath");

Then you may need to add the assembly to the app domain

AppDomain.CurrentDomain.Load(assembly.GetName());

After that you can load any type from this assembly

Type t = assembly.GetType("typeName");

Then using reflection you can execute methods on this type

Note that you may need to add the below in the configuration file.

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <probing privatePath="dlls folder"/>
  </assemblyBinding>
</runtime>
怀里藏娇 2024-10-19 02:05:34

LoadFile 与 LoadFrom

小心 - 这些不一样
东西。

LoadFrom() 通过 Fusion 并可以
被重定向到另一个程序集
不同的路径但相同
身份(如果已经加载)
LoadFrom 上下文。加载文件()
根本不通过 Fusion 进行绑定 -
装载机继续装载
正是*调用者所要求的。它
不使用 Load 或
从上下文加载。所以,LoadFrom()
通常会满足你的要求,
但不一定。 LoadFile() 用于
那些真正真正想要的人
要求什么。 (*但是,开始
在 v2 中,策略将应用于两者
LoadFrom() 和 LoadFile(),所以
LoadFile() 不一定是
正是所要求的。还,
从 v2 开始,如果程序集带有
它的身份在 GAC 中,GAC
将使用副本代替。使用
ReflectionOnlyLoadFrom() 加载
正是你想要的 - 但是,请注意
以这种方式加载的程序集不能
执行。)

LoadFile() 有一个问题。自从它
不使用绑定上下文,它的
依赖关系不会自动产生
在其目录中找到。如果他们不是
在加载上下文中可用,您
必须订阅
AssemblyResolve 事件以便绑定
给他们。

参考 Suzanne Cook 的 .NET CLR 注释

LoadFile vs. LoadFrom

Be careful - these aren't the same
thing.

LoadFrom() goes through Fusion and can
be redirected to another assembly at a
different path but with that same
identity if one is already loaded in
the LoadFrom context. LoadFile()
doesn't bind through Fusion at all -
the loader just goes ahead and loads
exactly* what the caller requested. It
doesn't use either the Load or the
LoadFrom context. So, LoadFrom()
usually gives you what you asked for,
but not necessarily. LoadFile() is for
those who really, really want exactly
what is requested. (*However, starting
in v2, policy will be applied to both
LoadFrom() and LoadFile(), so
LoadFile() won't necessarily be
exactly what was requested. Also,
starting in v2, if an assembly with
its identity is in the GAC, the GAC
copy will be used instead. Use
ReflectionOnlyLoadFrom() to load
exactly what you want - but, note that
assemblies loaded that way can't be
executed.)

LoadFile() has a catch. Since it
doesn't use a binding context, its
dependencies aren't automatically
found in its directory. If they aren't
available in the Load context, you
would have to subscribe to the
AssemblyResolve event in order to bind
to them.

ref Suzanne Cook's .NET CLR Notes

离去的眼神 2024-10-19 02:05:34

使用 Assembly.LoadFile 方法,然后使用反射在其中运行代码。

Use Assembly.LoadFile method and then run code inside it using reflection.

瑾夏年华 2024-10-19 02:05:34

实际上 Assembly.Load 通常是你想要的,不是 LoadFrom 也不是 LoadFile

哪种环境适合您?在
一般情况下,我强烈建议您
尽可能使用加载上下文

http://blogs. msdn.com/b/suzcook/archive/2003/05/29/57143.aspx

Actually Assembly.Load is usually what you'd want, not LoadFrom and not LoadFile:

Which context is right for you? In
general, I strongly recommend that you
use the Load context whenever possible

http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx

生生漫 2024-10-19 02:05:34

当项目已经运行时,您无法将 dll 添加到项目中。但是,您可以使用 Assembly.LoadFrom( filename) 加载 dll。通常这样的场景用于 SOA 或基于插件的项目。您可以使用接口来指定类型结构并加载dll并使用它。

You cannot add dll to a project when project is already running. However, you can load the dll using Assembly.LoadFrom( filename). Normally such scenerio is used for SOA or plugin based projects. You can use interface to specify the type structure and load the dll and use it.

忆梦 2024-10-19 02:05:34

您可以使用 Assembly.LoadFrom 方法来在运行时动态加载程序集。

You could use the Assembly.LoadFrom method to dynamically load an assembly at runtime.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文