2 Stimmen

Wie lässt sich feststellen, in welchem Framework eine Baugruppe geladen ist?

Ein Benutzer berichtete uns, dass einige seltsame Verhaltensweisen in unserer Anwendung nach der Installation von .NET 4 behoben werden können:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v2.0.50727" />
  </startup>
</configuration>

Mir war nicht bewusst, dass, wenn Sie eine Baugruppe nicht angeben, diese in einer höheren, aber kompatiblen Version geladen werden könnte.

Ist es möglich zu erkennen, mit welchem Framework eine ausführbare Datei ausgeführt wird? zur Laufzeit? oder durch einen externen Prozess? Ich möchte bestätigen, dass dies der Fall ist und die Erfahrung des Benutzers nicht auf ein anderes Problem zurückzuführen ist.


Process Explorer sagt, dass EVEMon unter 2.0 läuft, ich bin geneigt zu vermuten, dass das Problem in der Umgebung liegt:

Process Explorer

5voto

Nicole Calinoiu Punkte 20595

Im laufenden Code Ihrer Assembly können Sie die statische Eigenschaft System.Environment.Version verwenden, um die CLR-Version zu ermitteln, unter der sie ausgeführt wird.

Wenn Sie den Assemblercode nicht ändern wollen, können Sie Prozess-Explorer um die DLLs zu sehen, die zur Laufzeit in den Prozess geladen werden. Die CLR-Version kann anhand der Version von mscoree.dll ermittelt werden.

1voto

Hans Passant Punkte 894572

Es macht keinen Sinn, dass ein Programm, das für die CLR-Version 2.0.50727 gedacht war, nicht automatisch mit .NET 4.0 läuft. Ein expliziter Eintrag in die .config-Datei ist erforderlich. In Anbetracht der Fähigkeiten Ihrer Kundin im Umgang mit .config-Dateien könnte dies etwas sein, das sie tatsächlich getan hat und dann herausfand, dass es Probleme gab.

1voto

Conrad Frix Punkte 50686

Wie Nicole sagte, ist Process Explorer definitiv der einfachste Weg. Sie können diese Informationen auch aus einem Full Memory Dump mit WindDBG erhalten.

Beachten Sie auch, dass Sie mit 4.0 nebeneinander CLR-Hosting . Vor 4.0 mussten Sie, wenn Sie nicht Eigentümer des Prozesses waren keine Möglichkeit zu wissen, welche CLR geladen wurde . Dies kann ein Grund sein, warum Sie das beschriebene Verhalten erlebt haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X