57 votes

Déterminer cadre (CLR) de la version de l'assemblée

À partir de la ligne de commande (ou par aucun moyen vraiment), comment puis-je déterminer la CLR version un .NET de l'assemblée exige?

J'ai besoin de déterminer si une assemblée exige 2.0 4.0 ou version CLR.

59voto

Darin Dimitrov Points 528142

ildasm.exe montrera si vous double-cliquez sur le "MANIFESTE" et de chercher des "Métadonnées version". Par défaut, c'est la version que l'image a été compilé avec.

38voto

Une clarification...

Le problème avec tous les moyens mentionnés est qu'ils seront de retour en version 4.0 si le montage a été compilé avec .NET framework 4.0, 4.5 ou 4.5.1.

La façon de déterminer cette version par programme au moment de l'exécution est d'utiliser le Système.Moment de l'exécution.La gestion des versions.TargetFrameworkAttribute pour l'assemblée, par exemple

    object[] list = System.Reflection.Assembly.GetExecutingAssembly().GetCustomAttributes(true);
        System.Runtime.Versioning.TargetFrameworkAttribute a = (System.Runtime.Versioning.TargetFrameworkAttribute)
            list.Where(p => p.GetType() == typeof(System.Runtime.Versioning.TargetFrameworkAttribute)).FirstOrDefault();
        Console.WriteLine(a.FrameworkName);
        Console.WriteLine(a.FrameworkDisplayName);

Sera de retour

    a.FrameworkName ".NETFramework,Version=v4.0"    string
    a.FrameworkDisplayName  ".NET Framework 4"      string

    a.FrameworkDisplayName  ".NET Framework 4.5"    string
    a.FrameworkName ".NETFramework,Version=v4.5"    string

    a.FrameworkDisplayName  ".NET Framework 4.5.1"  string
    a.FrameworkName ".NETFramework,Version=v4.5.1"  string

34voto

Mehrdad Afshari Points 204872
class Program {
  static void Main(string[] args) { 
      System.Console.WriteLine(
             System.Reflection.Assembly.LoadFrom(args[0]).ImageRuntimeVersion);
  }
}

Compiler et exécuter l'application ci-dessus, en vertu de la dernière .NET Framework (comme un ancien CLR peut-être pas à la charge des assemblages nécessitant une nouvelle CLR) et l'exécuter en passant le chemin d'accès à l'assemblée, vous voulez vérifier que l'argument de ligne de commande.

12voto

Robin M Points 3307

Voici une PowerShell équivalent de la .NET code suggéré dans une autre réponse. À l'aide de PowerShell signifie que vous pouvez sauter quelques étapes, comme la création et la compilation d'une assemblée.

À une invite de PowerShell, exécutez la commande suivante:

[System.Reflection.Assembly]::LoadFrom("C:\...\MyAssembly.dll").ImageRuntimeVersion

Par défaut, PowerShell utilise le .NET v2 de l'exécution, de sorte que vous aurez une exception pour les assemblées cibler v4. Un Débordement de pile question Comment puis-je lancer PowerShell avec le .NET 4 runtime? détails méthodes pour modifier, si nécessaire.

5voto

Tinku Points 641

En ligne de commande

DUMPBIN votre dll/exe /CLRHEADER

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X