我们有一个类型缓存系统,以避免每次应用程序启动时搜索所有类型的所有插件程序集,但是当从.NET 1.1移动到2.0+时,事件日志记录致命执行引擎错误( AppDomain.Load()
上的6B3979C6)(80131506)如果和 仅 ,如果 1. AppDomain不是AppDomain.CurrentDomain。 2.程序集不在可执行文件的目录中。
我们允许用户在项目特定的目录中提供自己的程序集,因此我们无法解决2。
我相信1.我们希望我们可以在浏览类型后卸载AppDomain。
我不是此代码的所有者,但如果我没有提供足够的信息,我可以提出正确的问题。
此代码导致无法捕获的错误:
private static void AddAssembly( System.AppDomain appDom, Manifest manifest, string filenameWithoutExtension )
{
try
{
// Test that the assembly can be loaded...
System.Reflection.Assembly.ReflectionOnlyLoad(filenameWithoutExtension);
System.Reflection.Assembly assem = appDom.Load( filenameWithoutExtension );
ArrayList attributes = new ArrayList();
// System.Reflection.Assembly assem = System.Reflection.Assembly.LoadFrom(path+"\\"+file.Name);
object[] attribs = assem.GetCustomAttributes( typeof(PlugInAttribute), false );
if ( attribs.Length > 0 )
{
attribs = assem.GetCustomAttributes( false );
foreach ( Attribute attr in attribs )
{
object[] attrAttrs = attr.GetType().GetCustomAttributes(typeof(PlugInAttribute), false );
if ( attrAttrs.Length > 0 )
{
attributes.Add(attr.GetType().ToString());
break;
}
}
}
if ( attribs.Length > 0 || attributes.Count > 0 )
{
Assembly assy = new Assembly( manifest );
manifest.Assemblies.Add(assy);
assy.Name = filenameWithoutExtension;
assy.Version = AssemblyName.GetAssemblyName( System.IO.Path.Combine( manifest.Path, filenameWithoutExtension + ".dll") ).Version.ToString();
assy.Attributes = (ArrayList)attributes.Clone();
System.Type[] types = assem.GetTypes();
foreach (System.Type type in types )
if ( !type.IsNestedPrivate && !type.IsNestedPublic
&& !type.IsNestedAssembly )
assy.AddType( type );
}
}
catch ( Exception ex )
{
System.Diagnostics.Trace.WriteLine( "Manifest.AddAssembly Exception: " + ex.Message );
Manager.WriteException(ex);
}
}
答案 0 :(得分:0)
这是由第三方许可库引起的,该库将错误代码注入到流程中。