À 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.
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.
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
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.
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.
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.