Wir haben .NET 4.5 kürzlich auf unserem Build-Server für die kontinuierliche Integration installiert, so dass es neue Projekte unterstützen kann, die Funktionen von .NET 4.5 verwenden. Dieser Build-Server wird auch zum Erstellen und Bereitstellen älterer Projekte verwendet, von denen einige auf .NET 4.0 abzielen.Kann ein Build-Server mit .NET 4.5 erfolgreich ein Project Targeting 4.0 auf einen Server mit nur .NET 4.0 installieren?
Projekte, die auf diesem Server Ziel gebaut .NET 4.0 sind, dann zu einem Zielserver bereitgestellt, die nur installiert wird nun mit dem folgenden Fehler Fehler .NET 4.0 hat:
Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.
Environment.CurrentManagedThreadId ist ein neuer Eigenschaft von .NET Framework 4.5, so dass es sinnvoll ist, dass ein Server, auf dem 4.0 ausgeführt wird, es nicht finden kann. Allerdings sind wir sind Targeting .NET 4.0 zur Build-Zeit, so in der Theorie sollten wir nicht müssen 4.5 auf dem Produktionsserver installiert haben.
Fazit:
- Projekt zielt 4.0
- Build-Server 4.5
- Der Server, auf dem das Projekt installiert ist dann nur .NET 4.0 eingesetzt hat
- Projekt nicht zur Laufzeit mit Fehler
Method not found: 'Int32 System.Environment.get_CurrentManagedThreadId()'.
Was gibt? Ist es möglich, .NET 4.0 dlls auf einem Server mit nur installiertem .NET 4.0 erfolgreich auszuführen, wenn die dlls von einem Server mit .NET 4.5 erstellt werden?
Danke, dieser Blogeintrag scheint das genaue Problem zu beschreiben, das wir erleben. Soweit wir feststellen können, hat der Build-Server * bereits * die 4.0-Referenz-Assemblies, so dass wir uns immer noch nicht sicher sind, was falsch läuft. –
@DavidMills Im Allgemeinen würde ich wirklich empfehlen, 4.5 auf einem Build-Server nicht zu installieren, wenn Sie 4.0 als Ziel verwenden. Es gibt einfach zu viele Änderungen in diesem direkten Upgrade. Davon abgesehen sollte es funktionieren, wenn sich die Ref-Assemblies an der richtigen Stelle befinden. –
Danke, Reed. Wir haben einen Jenkins-Build-Slave-Server eingerichtet, um Projekte mit dem Ziel 4.0 zu unterstützen. Es ist bedauerlich, aber scheinbar notwendig. Hoffentlich wird Microsoft es sich zweimal überlegen, bevor eine weitere .NET-Version als In-Place-Upgrade veröffentlicht wird. –