Form dynamisch aus DLL laden

10/10/2008 - 11:52 von Roland Schumacher | Report spam
Hallo

Ich bewege mich zur Zeit auf Neuland.

Ich muss dieses Konstrukt
[...]
UI.InfoBox infoBox = new UI.InfoBox(true);
infoBox.ShowDialog();
[...]

so umbauen, dass ich es aus der Assembly.dll lade und auch anzeige. Mein
Ansatz ist:

[...]
UI.InfoBox infoBox =
(UI.InfoBox)Activator.CreateInstanceFrom(Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase),
"LAG.WordPlus.UI.dll").Replace(@"file:\", "")
, "UI.InfoBox", true, BindingFlags.CreateInstance, null, new Object[] {
true }, null, null, new System.Security.Policy.Evidence()).Unwrap();

infoBox.ShowDialog();
[...]

Ich bekomme aber immer folgende Fehlermeldung:

[...]
System.TypeLoadException: Der Typ UI.InfoBox in der Assembly
LAG.WordPlus.UI, Version=4.0.0.19269, Culture=neutral, PublicKeyToken=null
konnte nicht geladen werden.
bei System.Reflection.Assembly._GetType(String name, Boolean
throwOnError, Boolean ignoreCase)
bei System.Activator.CreateInstanceFrom(String assemblyFile, String
typeName, Boolean ignoreCase, BindingFlags bindingAttr, Binder binder,
Object[] args, CultureInfo culture, Object[] activationAttributes, Evidence
securityInfo)
bei LAG.WordPlus.OfficeAddIns.Word2002.Helper.GetInfoBox() in
P:\ProjectX\Helper.cs:Zeile 361.
[...]

Ich vermute einfach mal, ich habe irgend einen Parameter beim Activator
falsch. Aber welchen?

Gruss
Roland Schumacher
http://blog.geniali.ch/
http://jotd.geniali.ch/
 

Lesen sie die antworten

#1 Frank Dzaebel
10/10/2008 - 13:30 | Warnen spam
Hallo Roland,

Ich muss dieses Konstrukt [...]
so umbauen, dass ich es aus der Assembly.dll
lade und auch anzeige. ...



ich sag mal, folgendes funktioniert bei mit:

private void Form1_Load(object sender, EventArgs e)
{
string exeLocationPath = Assembly.GetExecutingAssembly().Location;
string lagPath = Path.Combine(Path.GetDirectoryName(
exeLocationPath), "MyControlsLib.dll"); //"LAG.WordPlus.UI.dll");

//Assembly asm = Assembly.LoadFrom(lagPath);
//Type[] types = asm.GetTypes();
//string s = types[0].FullName;

//Form f = Activator.CreateInstanceFrom(lagPath,
// "MyControlsLib.UI.InfoBox").Unwrap() as Form;

Form f = Activator.CreateInstanceFrom(lagPath,
"MyControlsLib.UI.InfoBox", true, BindingFlags.CreateInstance,
null, new Object[] {true}, CultureInfo.CurrentCulture, null,
new Evidence()).Unwrap() as Form;

f.ShowDialog();
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen