【发布时间】:2015-06-07 21:14:16
【问题描述】:
我曾经有一些代码扫描我的应用程序的bin 目录以查找尚未加载到 AppDomain 中的程序集并加载它们。它基本上看起来像:
foreach (var assemblyPath in Directory.GetFiles("path\to\bin", "*.dll"))
{
var inspected = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
Assembly.Load(inspected.GetName());
}
为简洁起见,我跳过了 try/catch 子句等。
这允许我在运行时将带有特定接口实现的程序集放到 bin 文件夹中,并让 IoC 容器自动拾取它们。现在有了新的 Roslyn 魔法,调试时不再有物理 DLL。有什么方法可以动态检索程序集名称、项目名称或依赖项名称(在project.json 中)。
我想我必须实现类似this example in the Entropy repo 的东西,但我不知道如何为我的场景实现它。
【问题讨论】:
-
“不再有物理 DLL”是什么意思?在 ASP.NET5 之前,Roslyn 没有什么神奇之处。
-
@PauloMorgado 代码现在在调试时在内存中编译。它可能仍然适用于已发布的应用程序,但我希望它能够双向工作。
-
代码一直在内存中编译。它只是保存到磁盘并加载它们 - 不同的编译器,不同的 API。尽管如此,网站上编译的内容是在一个程序集中,其他程序集是按需加载的。发生了什么变化?
-
@PauloMorgado 我说的是程序集被保存到磁盘。这让我可以扫描 bin 文件夹并动态加载程序集。
-
好吧,我们中的一个人完全错了。
标签: c# asp.net-core c#-6.0