/ / Überprüfung von Mono.Cecil und Mono.Cecil.Cil - c #, .net, Monoentwicklung, Mono.cecil, Assembly.load

Überprüfen von Mono.Cecil und Mono.Cecil.Cil - c #, .net, monodevelop, mono.cecil, assembly.load

Ich habe etwas Code zum Laden einer Exe-Datei und zeigt dem Benutzer seinen CIL-Code. Dazu verwende ich Mono.Cecil und Mono.Cecil.Cil.

Jetzt möchte ich etwas anderes machen: Ich möchte wissen, ob der Benutzer Mono.Cecil und Mono.Cecil.Cil in seinem System hat. dazu habe ich gedacht, Reflection.Assembly.Load mit Mono.Cecil und Mono.Cecil.Cil zu verwenden. So etwas wie:

public void PrintInstr( ) {
try
{
Reflect.Assembly mc = Reflect.Assembly.Load( "Mono.Cecil" );
Reflect.Assembly mcc = Reflect.Assembly.Load( "Mono.Cecil.Cil" );
}
catch( Exception )
{
System.Console.WriteLine( ""Mono.Cecil" or "Mono.Cecil.Cil" not found " );
return;
}
//[...]
}

Ich erhalte jedoch nur den folgenden Fehler:

Could not load file or assembly "Mono.Cecil" or one of its dependencies.
The system cannot find the file specified.

Und natürlich habe ich Mono.Cecil und Mono.Cecil.Cil. Verwende ich nicht ordnungsgemäß Assembly.Load? Wenn dies der Fall ist, kann mir jemand sagen, wie ich Assembly.Load verwenden kann, um Mono.Cecil und Mono.Cecil.Cil laden zu können, ohne einen Pfad zu suchen (um eine einzige Exe-Datei für Windows oder GNU zu erstellen / Linux mit Mono)?

Hinweis: Ich arbeite unter Linux Mint mit MonoDevelop 2.6 oder unter Windows 7 mit MonoDevelop 2.8.

Antworten:

3 für die Antwort № 1

Du scheinst falsch zu verstehen, was Assembly.Load tut die Baugruppe zu laden. Ich denke, was Sie versuchen zu suchen, ist, ob der Benutzer Mono.Cecil im GAC hat. Das Problem ist, dass nur die Suchpfade der aktuellen AppDomain durchsucht werden, wenn Sie einen partiellen Namen angeben. Der GAC wird nur verwendet, wenn Sie Geben Sie den vollständigen Namen an. Dies ist dokumentiert Hier:

Angeben eines Teils der Baugruppe für assemblyRefist nicht zu empfehlen. (Bei einem partiellen Namen werden Kultur, Version oder öffentlicher Schlüssel nicht angegeben Zeichen. Für Überladungen, die eine Zeichenfolge anstelle eines Assemblynamens benötigen Das Objekt "MyAssembly, Version = 1.0.0.0" ist ein Beispiel für einen Teilnamen und "MyAssembly, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 18ab3442da84b47 "ist ein Beispiel für einen vollständigen Namen.) Using Teilbezeichnungen wirken sich negativ auf die Leistung aus. A Teilname der Baugruppe kann eine Baugruppe aus der globalen Baugruppe laden Cache nur dann, wenn eine genaue Kopie der Baugruppe im Ordner vorhanden ist Basisverzeichnis der Anwendung (BaseDirectory oder AppDomainSetup.ApplicationBase).

Weitere Informationen zu den CLR-Sonden für Baugruppen finden Sie hier: http://msdn.microsoft.com/en-us/library/aa720133.aspx

Genau deshalb Assembly.LoadWithPartialName () existiert, aber es ist veraltet.