ソリューションで使用されるアセンブリのコードをコピーして、同様のアセンブリを作成しました。GUTS は異なっていましたが、シェルは同じままでした。
これらのアセンブリは、アドオンであり、コア コードの一部ではないクライアントのプロジェクトで使用されます。完成したので、アセンブリは想定どおりにロードしたくありません。
アセンブリをロードするコードは
var assemblyName = ((XmlElement)xmlDoc.GetElementsByTagName("AssemblyName")[0]).InnerText;
var qualifiedClass = ((XmlElement)xmlDoc.GetElementsByTagName("QualifiedClass")[0]).InnerText;
IExternalAddOn addOn = (IExternalAddOn)Activator.CreateInstance(assemblyName, qualifiedClass).Unwrap();
var properties = new Dictionary<Type, object>();
properties[typeof(DevExpress.XtraBars.Ribbon.RibbonControl)] = mainForm.ribbon;
var form = addOn.ShowForm(properties);
if (form != null)
{
form.MdiParent = mainForm;
form.Text = pListRow.NAME;
form.Show();
CreateInstance 部分で例外が発生します。
興味深いのは、私が使用するとき
Assembly ass = Assembly.LoadFrom(assemblyName); // this is test code
Type at = ass.GetType(qualifiedClass);
IExternalAddOn addOn = (IExternalAddOn)Activator.CreateInstance(at);
アセンブリをロードして型を取得すると、CreateInstance が機能します。
アンラップが必要な理由 2 つの異なる読み込み方法に違いはありますか? そして、なぜ最初のものは機能しないのですか?
ありがとう
J