【发布时间】:2012-03-11 12:30:40
【问题描述】:
有一个相当大的项目,其中向 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));
}
【问题讨论】:
-
如果我理解正确,您在包含 MEF 部件的配置文件中定义了一些程序集,而在项目中引用的其他程序集也包含 MEF 部件。您正在尝试为您的 CompositionContainer 构建一个目录,以便包含来自两个来源的所有部分。目前,某些零件不会在您的目录中结束。您是否需要在多个组件中寻找零件?
-
addAssembly 方法究竟做了什么?能发一下代码吗?
-
我正在尝试将在设计时引用的目录添加到目录中,而无需在代码中明确添加它们,然后根据配置文件添加其他部分并使用字典来避免重复我遇到的问题回来用了几天调试!!