2017-06-08 2 views
2

Dies ist für mein Abschlussprojekt. Die Idee des Spiels ist es, Schülern zu helfen, das Programmieren zu üben, indem sie einige interessante Missionen bereitstellen, die eine C# -Code-Lösung wie codingame.com erfordern. Wenn der Benutzer die korrekte Ausgabe erzeugt, wird das Ergebnis in einer Unity-Szene visualisiert.NotSupportedException: Das aufgerufene Member wird in einem dynamischen Modul in C# Unity 5 nicht unterstützt.

Ich verwende ein C# -Compiler-Plugin, um den Code des Benutzers in der Unity 5-Laufzeit zu kompilieren. Alles funktioniert einwandfrei (jede Szene beginnt, die Szene im Editor abzuspielen und zu stoppen), aber wenn ich von Szene zu Szene gehe, steigt dieser Fehler, wenn ich den C# -Code des Benutzers zur Laufzeit erstelle (NotSupportedException: Das aufgerufene Mitglied wird in einem dynamischen Modul nicht unterstützt) (der Fehler steigt in der zweiten oder nächsten Szene immer an).

den Fehler:

NotSupportedException: The invoked member is not supported in a dynamic module 

Error

die Zeile, die den Fehler erzeugt:

this.assemblyReferences = domain.GetAssemblies().Select(a => a.Location).ToArray(); 

assemblyRefrences ist ein Array von Zeichenketten: String [] Assembly;

diese Zeile in einem Skript namens ScriptBundleLoader in seinem Konstruktor

+0

Fügen Sie den Code hinzu, in dem der Fehler auftritt, und fügen Sie die Ausnahme als Text und nicht als Bild hinzu. – Gusman

+0

Ich habe sie beide hinzugefügt, aber ich schreibe sie noch einmal: Die Zeile, die den Fehler erzeugt, lautet: this.assemblyReferences = domain.GetAssemblies(). Wählen Sie (a => a.Location) .ToArray() und der Fehler ist NotSupportedException: The Aufgerufenes Mitglied wird in einem dynamischen Modul nicht unterstützt. –

+0

Bitte lesen [Unter welchen Umständen kann ich meiner Frage "dringende" oder ähnliche Formulierungen hinzufügen, um schnellere Antworten zu erhalten?] (https://meta.stackoverflow.com/q/326569) - die Zusammenfassung ist, dass dies kein idealer Weg ist, um Freiwillige anzusprechen, und ist wahrscheinlich kontraproduktiv, um Antworten zu erhalten. Bitte unterlassen Sie das Hinzufügen zu Ihren Fragen. – halfer

Antwort

2

Der Fehler tritt auf, weil Sie versuchen, die Position einer in-Memory-Anordnung zu erhalten (die, die Sie im laufenden Betrieb erstellt haben) und diese Baugruppen aren Ich bin nirgendwo zu finden.

Wenn Sie diesen Fehler zu vermeiden, so etwas wie dies versuchen:

this.assemblyReferences = domain.GetAssemblies().Select(a => 
{ 
    try{ return a.Location; }catch{ return null; } 

}).Where(s => s != null).ToArray(); 

EDIT:

Als Jon Skeet darauf hingewiesen verwendet werden kann "IsDynamic" statt Trapping die Ausnahme:

this.assemblyReferences = domain.GetAssemblies() 
    .Where(a => !a.IsDynamic) 
    .Select(a => a.Location) 
    .ToArray(); 
+0

bro du bist super Danke sehr, sehr sehr –

+0

wie man deine Antwort die richtige? –

+0

Überprüfen Sie das "v" unter der Punktzahl, aber ich denke, Sie müssen 10 Minuten warten, um es zu akzeptieren, unterdessen können Sie es upvote. – Gusman

Verwandte Themen