gpt4 book ai didi

c# - 有没有一种方法可以让我在实际执行之前安全地检查是否可以加载程序集?

转载 作者:太空宇宙 更新时间:2023-11-03 20:22:36 24 4
gpt4 key购买 nike

我正在开发一些可以为某些 dll 动态构建菜单项的软件,这样我们就可以根据用户计算机上可用的 dll 动态加载组件。我要加载的任何 dll 都已在 AssemblyInfo.cs 文件中标记有程序集属性,以及我如何确定是否要为该 dll 构建菜单项。到目前为止,这是我的方法:

private void GetReportModules() {
foreach (string fileName in Directory.GetFiles(Directory.GetCurrentDirectory())) {
if (Path.GetExtension(fileName) == ".dll" || Path.GetExtension(fileName) == ".exe") {
System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(fileName);
object[] attributes = assembly.GetCustomAttributes(typeof(ReportNameAttribute), false);
if (attributes.Count() > 0) {
ReportNameAttribute reportNameAttribute = attributes[0] as ReportNameAttribute;
Type type = assembly.GetType(reportNameAttribute.BaseType);
MenuItem customReportsMenuItem = new MenuItem();
customReportsMenuItem.Header = reportNameAttribute.ReportName;
ReportsMenuItem.Items.Add(customReportsMenuItem);
customReportsMenuItem.Click += (s, ev) => {
var obj = Activator.CreateInstance(type);
type.InvokeMember("Show", System.Reflection.BindingFlags.Default | System.Reflection.BindingFlags.InvokeMethod, null, obj, null);
};
}
}
}
}

在大多数情况下,它工作正常,我得到了我期望的 dll,并且正在创建我的菜单项。问题是为了检查属性,我首先需要使用反射加载程序集。当我尝试加载一些其他本地 dll 时,它们会抛出有关缺少依赖项的错误,或者他的模块应该包含程序集 list 。有没有一种方法可以让我在实际执行之前安全地检查是否可以加载程序集? (我写出来时听起来很愚蠢)。关于我遇到的问题的任何想法或关于如何完成我在这里尝试的更好的建议?感觉有点头疼。

最佳答案

您可以创建一个单独的 AppDomain ,尝试在那里加载程序集,发回结果,然后卸载 AppDomain。这样您就不会用任何已加载程序集的“垃圾”更改当前的 AppDomain。

关于c# - 有没有一种方法可以让我在实际执行之前安全地检查是否可以加载程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com