Abrufen von Ziel-Framework-Version-und Ziel-Rahmen-Profil aus .Net-Assembly
Gibt es irgendeine Möglichkeit, dass ich Zugriff auf die Werte, die verwendet wurden, für TargetFrameworkVersion und/oder TargetFrameworkProfile wenn ein .Net-assembly kompiliert wurde?
Die Werte, die ich spreche, sind diejenigen, die enthalten die Projekt-Datei
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OtherStuff>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<OtherStuff>
</PropertyGroup>
<OtherStuff>
</OtherStuff>
</Project>
Im Grunde möchte ich herausfinden, was das Ziel Version des Frameworks wurde, wenn die assembly kompiliert wurde und wenn möglich den Ziel-Rahmen-Profil als gut.
- Und ich spreche nicht über die aktuell geladene version der CLR, Umwelt.Version nicht das, was ich bin nach.
Idealerweise die Lösung wäre die Verwendung von System.Reflexion aber wenn ich Zuflucht zu anderen Methoden, die ich will.
- Ich glaube, die
TargetFrameworkProfile
betrifft nur die Verweise in Visual Studio können Sie aus dem Projekt. Ich glaube nicht, dass etwas kompiliert wird in der output-Baugruppe. - Damien ich denke, Sie sind richtig. Ich sehe es nicht als ein verfügbaren Projekt-level-Eigenschaft, die übergeben werden kann, um MSBuild. Wenn es nicht zu MSBuild, dann ist es sicherlich nicht gehen, um in die Assembly eingebettet. Ich kann immer noch Leben in der Hoffnung, dass TargetFrameworkVersion ist eingebettet in dort irgendwo obwohl.
public string TargetFrameworkProfile { get; set; }
Microsoft.Bauen.Aufgaben
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du zufrieden mit der version der CLR, dass die kompilierte assembly, die Sie verwenden können, die
Assembly.ImageRuntimeVersion
Eigenschaft. Laut MSDN ist, wird die Eigenschaft:und
Natürlich, dass doesn ' T geben Sie die spezifische version des .NET-Framework (zum Beispiel: .NET Frameworks 2, 3.0 und 3.5 sind alle auf der CLR 2.0).
Wenn die CLR-version ist nicht ausreichend, Sie könnten versuchen, zu "schätzen" (Vermutung intelligent), welche version es basiert auf den Versammlungen, auf den es verweist. Für .NET 1 und 4, die CLR-version sollte genug sein. Allerdings, wenn die CLR-version 2.0 hat, würde man nicht wissen, ob das bedeutete, 2.0, 3.0, oder 3.5, so dass Sie versuchen könnte, etwas mehr Logik. Zum Beispiel, wenn Sie sah, dass die Assembly verwiesen wird
System.Core
(mitAssembly.GetReferencedAssemblies()
), dann würden Sie wissen, dass die version 3.5 seitSystem.Core
war neu in 3.5. Das ist nicht gerade "rock solid", da die Versammlung in Frage stellen könnten, nicht zu verwenden, alle Typen aus der Assembly, so dass Sie wäre nicht in der Lage zu fangen, die. Versuchen, Sie zu fangen mehr Fällen könnten Sie eine Schleife durch alle die referenzierten Assemblys und überprüfen Sie Ihre version zahlen - vielleicht filtern, um nur Baugruppen, die mit beginnen System, Fehlalarme zu vermeiden mit anderen Bibliotheken. Wenn Sie sehen, alle System.* Assemblys verwiesen wird, dass eine version von 3.5.x.x, dann kann man auch ziemlich sicher sein, gebaut wurde es für 3.5.Als Sie bemerkt haben, ich glaube nicht, dass die
TargetFrameworkProfile
entweicht Vergangenheit Visual Studio. Jedoch, wenn es geschieht, um eine app.config-Datei für die Anwendung, Visual Studio kann das Ziel-framework in es. Zum Beispiel, wenn Sie Projekt zu verwenden, den 4.0 Client Profile, erstellt Visual Studio eine app.config wie hier:System.Core.dll
- Datei. Ich würde erwarten, dass die meisten Arten, so zu sein als gut. Aber wahrscheinlich der beste Weg, sicher zu wissen, wäre, um es zu testen und sehen. 🙂Wenn die assembly kompiliert wurde, mit dem TargetFrameworkAttribute (assembly scoped), können Sie einfach und einheitlich bestimmen Sie die Rahmen-Profil Ziel.
Probieren Sie dieses Beispiel aus, und verweisen Sie Ihre eigenen benutzerdefinierten Assemblys mit verschiedenen Zielen.
Versuchen auch in diesem Beispiel abzurufen, die Ziel-und die aktuellen Versionen .NET framework zur Laufzeit (funktioniert für .NET V4.X) :
njappboy die Lösung funktioniert Super. Ich brauchte VB.Net version, hier also der Umwandlung.