2010-01-30 7 views
6

Wie können Sie feststellen, ob eine bestimmte .Net-Baugruppe bereits vorhanden ist oder nicht? Ich muss vom Code überprüfen. Selbst das Aufrufen der Befehlszeile wäre in Ordnung. Im Moment sehe ich keinen Weg, dies zu bestimmen.Wie kann festgestellt werden, ob die Montage durchgeführt wurde?

+0

In Code? Von der Befehlszeile? Interaktiv? Was? Es muss in den Dateieigenschaften irgendwo sein ... –

Antwort

3

Sie können versuchen, Ihre Assembly in "ngen cache" (C: \ Windows \ Assembly \ NativeImages_v2XXXXXXX) zu finden.

Gespeicherte Baugruppen haben den folgenden Formatnamen: [Basisname]. ni. [Basisextension].

+0

Windows 7 scheint sie zu speichern ist ein etwas anderer Ort, und ohne '.ni.' im Namen: C: \ Windows \ Assembly –

+0

Sehr seltsam. Ich habe Windows 7 installiert, und "Ngen Cash" Pfad ist "C: \ Windows \ Assembly \ NativeImages_v2.0.50727_32 \". – Sasha

4

prüfen Von Code

Überprüfen Sie, ob wir einen nativen Bild für die Ausführung Baugruppe geladen werden. Ich suche nach dem Muster "\ assemblyname.ni" in der geladenen Moduldateinameneigenschaft.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 
using System.Diagnostics; 

namespace MyTestsApp 
{ 
    class Program 
    { 
     static bool Main(string[] args) 
     { 

      Process process = Process.GetCurrentProcess(); 

      ProcessModule[] modules = new ProcessModule[process.Modules.Count]; 
      process.Modules.CopyTo(modules,0); 

      var niQuery = from m in modules where m.FileName.Contains("\\"+process.ProcessName+".ni") select m.FileName; 
      bool ni = niQuery.Count()>0 ?true:false; 

      if (ni) 
      { 
       Console.WriteLine("Native Image: "+niQuery.ElementAt(0)); 
      } 
      else 
      { 
       Console.WriteLine("IL Image: " + process.MainModule.FileName); 
      } 

      return ni; 
     } 
    } 
} 

Command Line Lösung:

Run "ngen-Anzeige" auf Eingabeaufforderung.

Beispiel:

ngen Anzeige MyTestsApp.exe

Wenn installiert, druckt es so etwas wie india Bilder aus: MyTestsApp, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null

und liefert 0 (% Errorlevel%)

Ansonsten ist es ausdruckt:

Fehler: Die angegebene Baugruppe ist nicht installiert.

und liefert -1