アプリケーションが起動するたびに.NET 1.1から移行する際に、すべてのタイプのプラグインアセンブリをすべて検索しないようにするために、 2.0+に、イベントログはAppDomainアセンブリの負荷によって致命的な実行エンジンエラー(6B3979C6)が発生する(80131506)
の場合とのみ 1. 場合のAppDomainがAppDomain.CurrentDomainされていないAppDomain.Load()上の致命的な実行エンジンエラー(6B3979C6)(80131506)を記録します。 2.アセンブリが実行可能ファイルのディレクトリにありません。
我々は、ユーザーがプロジェクト固有のディレクトリに自分自身のアセンブリを提供することができますので、私たちは周りの2
私は1がそのように私たちはタイプのためにスキミング後にアプリケーションドメインをアンロードすることができ望まれると信じて動作することはできません。
私はこのコードの所有者ではありませんが、私は十分な情報を提供していない場合は適切な質問をすることができます。これは、プロセスにバギーコードを注入し、サードパーティのライセンスライブラリによって引き起こされた
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);
}
}