c# - 使用 MEF 将程序集添加到目录

标签 c# .net wpf prism mef

有一个相当大的项目,将近十几个程序集添加到 shell 中,其他程序集通过配置添加

试图找到一种更好的方法来添加项目中引用的程序集

目前的代码是这样的

 Dictionary<string,string> dict = new Dictionary<string,string>(); // to avoid duplicate parts
 foreach (Assembly an in AppDomain.CurrentDomain.GetAssemblies())
            addAssembly(an, dict);

 foreach (AssemblyName an in Assembly.GetEntryAssembly().GetReferencedAssemblies())
            addAssembly(an, dict);

 foreach (AssemblyName an in GetAsmInConfig())
            addAssembly(an, dict);

即便如此,并非所有在设计时引用到 Shell 的程序集都添加到目录中

想知道除了将所有程序集添加到配置中是否还有其他方法可以解决问题

更新

  void addAssembly(Assembly a, Dictionary<string, string> dict)
    {
        if (a.IsDynamic || dict.ContainsKey(a.FullName))
            return;

        dict.Add(a.FullName, a.FullName);
        AggregateCatalog.Catalogs.Add(new AssemblyCatalog(a));        
    }

最佳答案

编译器将删除对未实际使用的引用,因此您不能依赖它作为枚举程序集的机制。 您的选择是:

  1. 使用配置文件
  2. 使用目录目录

关于c# - 使用 MEF 将程序集添加到目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654930/

相关文章:

c# - 为什么禁用按钮会删除其背景颜色?

C# Linq Contains 语句

c# - 导出使用 scikit-learn 库创建的 "RandomForestRegressor"模型

c# - 打包 .NET 应用程序以便它可以在没有 .NET 的计算机上运行

.net-4.0 - System.IO.dll 的意义何在?

c# - 如果数据库中的值发生变化,如何持续更新该值

c# - DataGridRow 背景属性的默认值

c# - ASP.NET Core 路由中间件将租户名称放在 url 中

c# - C++ DLL 和 C# Unity 之间的集成

c# - GC.AddMemoryPressure() 不足以按时触发 Finalizer 队列执行