Hallo,
habe hierzu nichts passendes in der forumsuche gefunden, also will ich mal 😉
Ich habe dank des Beispiels unter http://www.codeproject.com/KB/cs/pluginsincsharp.aspx
meine EditorTools beliebig erweiterbar gemacht, funktioniert auch super.
Initialisierung etc. geht einwandfrei, aber:
Szenario:
Wenn ich das dokument lade, kommt das (Auszug aus meiner Logdatei):
ERR: 28.02.2008 14:58:59 | [MenuScreenEditor] Error occured while loading file!
ERR: 28.02.2008 14:58:59 | [MenuScreenEditor] Details: 'Die Assembly MenuScreenDesigner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null kann nicht gefunden werden.'.
ERR: 28.02.2008 14:59:02 | [MenuScreenEditor] Error occured while loading file!
ERR: 28.02.2008 14:59:02 | [MenuScreenEditor] Details: 'Die Assembly MenuScreenDesigner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null kann nicht gefunden werden.'.
Wieso Assembly fehler? Laden des Plugins "MenuScreenDesigner.dll" klappt doch offenbar einwandfrei, aber wenn ich das gespeicherte ".kdesigner" dokument lade, kommt der Fehler 🙁
Bin schon nahezu am verzweifeln, erst klappt alles so gut und reibungslos, und dann das 🙁
Weiß auch nicht was ich hier machen soll, Hilfe ist gerne willkommen 🙂
Danke,
chris
EDIT: Load Code:
if ( this._unsafedContent ) {
// TODO: Notify user!
} else {
OpenFileDialog open = new OpenFileDialog();
open.Filter = FILE_FILTER_KMS_DESIGN;
open.Title = "Load Designer Menu Screen File...";
open.InitialDirectory = Application.StartupPath;
if ( open.ShowDialog() == DialogResult.OK ) {
if ( MSEFiles.MSEFileFunctions.LoadMSEFile( open.FileName ,
this.menuScreenDesignerPanel1 , this.hrtbCode ) ) {
this.menuScreenDesignerPanel1.Refresh();
// append to our recents (if not in already)
if ( !this._recentlyLoadedFiles.Contains( open.FileName ) )
this._recentlyLoadedFiles.Add( open.FileName );
// check for (maybe) a trans table file with the same name but different extension
string transFile = Path.GetFileNameWithoutExtension( open.FileName );
transFile += ".trans";
this._hasTransTableFile = ( File.Exists( transFile ) );
this._loadedFile = open.FileName;
this._unsafedContent = false;
this._saved = true;
}
}
EDIT2: Aufgerufende Methode
public static bool LoadMSEFile( string filename , MenuScreenDesignerPanel pnl,
HighlightingRichTextBox hrtbCode) {
Stopwatch sw = new Stopwatch();
sw.Start();
// we try it binary now
FileStream stream = new FileStream( filename , FileMode.Open , FileAccess.Read );
//BinaryWriter bw = new BinaryWriter( stream );
BinaryFormatter bf = new BinaryFormatter();
bool result = false;
string err0 = "";
string err1 = "";
try {
// Grab the MenInformation and serialize THAT!
// load them in
pnl.MenInformation = (MenuScreenInformation)bf.Deserialize( stream );
// and gather the elements out from it
pnl.BaseClasses = pnl.MenInformation.Elements;
KDesignerPanel.SetDependentPanel( pnl.BaseClasses , pnl );
// also select none
pnl.DenyAllSelections();
// now load the code into the hrtb
LoadCodeFile( filename , hrtbCode );
result = true;
} catch ( Exception ex ) {
err0 = "Error occured while loading file!";
err1 = String.Format( "Details: '{0}'." , ex.Message );
result = false;
} finally {
stream.Close();
sw.Stop();
}
if ( result ) {
string dur = String.Format( "Loaded MenuScreen file (took '{0}' ms)." , sw.ElapsedMilliseconds.ToString() );
KETLogging.LogMessageToListView( GlobalVariables.MAINFORM.lsvLogging ,
K_Engine.Logging.ELoggingMessageType.Info , dur , "MenuScreenEditor" );
} else {
KETLogging.LogMessageToListView( GlobalVariables.MAINFORM.lsvLogging ,
K_Engine.Logging.ELoggingMessageType.Error , err0 , "MenuScreenEditor" );
KETLogging.LogMessageToListView( GlobalVariables.MAINFORM.lsvLogging ,
K_Engine.Logging.ELoggingMessageType.Error , err1 , "MenuScreenEditor" );
}
return result;
}
Projekte:
http://code.google.com/p/freeminerdotnet/ - MMORPG-Maker im grafischen Stile von Minecraft
http://code.google.com/p/directzzt/ - ZZT Remake mit eigenen Ideen
Der Code sieht zumindest sauber aus - vergewissere dich das in deiner .kdesigner Datei die Klasse MenuScreenEditor vom Typ MenuScreenInformation abgeleitet wurde oder falls es ein Interface sein sollte dieses implementiert. Ebenso ob einen parameterlosen public Konstruktor in der Klasse MenuScreenEditor vorhanden ist.
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(
Hallo,
der Punkt ist doch der, dass als ich es in meiner K_EditorTools assembly drinhatte, alles noch funktionierte und seit ich dass ich einer eben "plugin-assembly" drinhabe, das laden nicht funzt, dabei hab ich den Code nicht geändert 🙁
Das kann nicht sein, es ist bestimmt wieder einer dieser "nadel im heuhaufen" bugs oder was-auch-immer....
Projekte:
http://code.google.com/p/freeminerdotnet/ - MMORPG-Maker im grafischen Stile von Minecraft
http://code.google.com/p/directzzt/ - ZZT Remake mit eigenen Ideen
Na ja, ansonsten hast in deinen AddOns/Addins wirklich immer nur eine Klasse drinnen?
Den mit (MenuScreenInformation)bf.Deserialize( stream ); gehst davon schon aus.
Würde doch eher das anstreben wie es im Linkt von Codeproject gelöst wurde. Finde den Weg viel sauberer, auch wenn es mehr Zeit kostet das nun nachträglich einzufügen (naja 1/2 -1 Tag). Vorallem kann man dort anhand von Abfragen schon prüfen, ob das Plugin überhaupt geladen werden kann, statt mit einen try catch 🙂
Wie vernichtet stand Andreas unter den flammenden Augen seiner Kunden.
Ihm war's, als stünde des Schicksals dunkle Wetterwolke über seinem Haupte X(