| 

.NET C# Java Javascript Exception

1
Wenn ich bspw. wissen möchte, in welcher .NET Version meine aktuelle Assembly ausgeführt wird, welche Abfrage bietet sich an?
News:
06.04.2011
CRegenschein 635 1 9
Danke für die Antworten; auf beide Arten habe ich es versucht. Aber ich bekomme nicht das erwartete Ergebnis. Statt .NET 3.5 bekomme ich eine 2.x.x Version angezeigt (läuft als Webservice) Woran könnte das liegen?
CRegenschein 06.04.2011
Die "interne" Version von .NET ist nicht die Version, unter der das Framework veröffentlicht wird. So haben z.B. die Frameworks 1.0 und 1.1 beide die Laufzeitversion 2.0.x.x und .NET 2.0 die Laufzeitversion 2.5.x.x.

Irgendwo soltle sich eine "Übersetzung" für die Nummern auftreiben lassen.
Andreas Ganzer 06.04.2011
4 Antworten
1
Ich glaube das Statement erhellt die Situation ein wenig:

The assemblies that are used for dynamic compilation might be for a later .NET Framework version than the version that the Web application targets. The GAC contains only the most current assemblies for each version of the CLR that is installed on a computer. Therefore, the compiler uses the most current version of the .NET Framework that is installed on the computer for the selected version of the CLR. For example, the .NET Framework 2.0, the .NET Framework 3.0, and the .NET Framework 3.5 all use the .NET Framework 2.0 CLR. If a computer has the .NET Framework 3.5 installed, and if a Web application uses an application pool that is associated with the .NET Framework 2.0 CLR, ASP.NET uses the .NET Framework 3.5 assemblies.
09.04.2011
wurzelchen 264 4
ich hab's bei mir mal durchgespielt;
der compile der web-app für das zielframework 2, 3 und 3.5 ergibt immer ein binary mit der target version 2 -> das erklärt warum alle Reflection Abfragen auch tapfer 2 zurückgeben.
Ein Compile für Framework 4 erzeugt dann endlich eine korrekte Target-Version ;-(
wurzelchen 09.04.2011
Version 3.5 könnte man evtl. über das Auslesen der web.Config von Version 2 & 3 unterscheiden;
Zwischen 2 & 3 sehe ich gar keine Möglichkeit das korrekt auszulesen.

Angesichts der Probleme würde ich fast zu einem eigenen Flag tendieren das die kompilierte Version ausgibt?
wurzelchen 09.04.2011
2
System.Console.WriteLine(System.Reflection.Assembly.GetExecutingAssembly().ImageRuntimeVersion);

bzw. nur
System.Reflection.Assembly.GetExecutingAssembly().ImageRuntimeVersion;


Ergänzung 1:

Dann versuche es bitte mit:
System.Reflection.Assembly.LoadFrom(@"DeineAssembly").ImageRuntimeVersion

Für "DeineAssembly" gibst du Pfad und Dateiname zu deiner Assembly an. Damit kannst du die Version jeder Assembly abfragen.
06.04.2011
Jürgen Luhr 6,9k 1 8
oki oki ok okii
– Gast 09.04.2011
1
Oder über das Environment:

System.Environment.Version
06.04.2011
PinBack 602 7
1
Wenn das als Webservice läuft wird dein Programm - wenn ich mich recht erinnere - in der Framework Version ausgeführt die dort konfiguriert ist.

Im IIS war das glaub ich im Application-Pool einstellbar (sry. genauer weiss ich's nicht mehr, ist lange her). Abfragen lässt sich das dann auch nur wenn der Service-Host die passenden Informationen ausliefert.

Dieses Projekt klingt danach als könnte es weiterhelfen:
http://owenbrady.net/browsercaps/

hm... denkfehler, das wär von ausserhalb, du willst das ja innerhalb des Programms wissen...
vielleicht hilft das hier weiter (kann das im moment aber nicht testen):

System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion();
06.04.2011
wurzelchen 264 4
danke dafür; habe es versucht, aber hartnäckig wird die 2.0.x version angezeigt (obwohl 3.5 features benutzt werden ;-)) - ich stehe weiterhin vor einem rätsel
CRegenschein 08.04.2011

Stelle deine .net-Frage jetzt!