Kann ich C # 4.0 mit dem auf .NET 3.5 festgelegten Zielframework verwenden, um eine Erweiterung für ArcMap 9.3 zu entwickeln? Oder muss es C # 3.0 oder früher sein?
Kann ich C # 4.0 mit dem auf .NET 3.5 festgelegten Zielframework verwenden, um eine Erweiterung für ArcMap 9.3 zu entwickeln? Oder muss es C # 3.0 oder früher sein?
Antworten:
Kurze Antwort: Nach meiner Erfahrung sollte es absolut kein Problem geben, .NET 3.5-basierten Code für ArcGIS 9.3 in Visual Studio 2010 (mit C # -Sprachenversion 4) zu entwickeln, solange Sie explizit auf .NET Framework 3.5 abzielen. Die C # -Sprachenversion ist hier meist irrelevant.
PS: Diese Antwort geht nicht auf die Unterschiede ein, die zwischen der Entwicklung einer ArcGIS-Erweiterung für die Versionen 9.3 und 10 bestehen. (ESRI hat einige wichtige Änderungen am Add-In-Modell vorgenommen, aber ich gehe davon aus, dass Sie sich dessen bewusst sind .)
Längere Antwort: Sie müssen zwischen der C # -Sprachenversion und der Ziel-Framework-Version unterscheiden.
Sie können sich vorstellen, dass .NET Framework aus zwei Hauptteilen besteht: der CLR (Common Language Runtime) und der BCL (Base Class Library). Ersteres ist die "virtuelle Maschine", während letzteres die Klassenbibliothek ist (die alle Typen enthält, die Sie in MSDN nachschlagen können).
.NET Frameworks 2 bis 3.5 verwenden alle dieselbe CLR (Version 2), dh die Ausführungsumgebung hat sich nicht wirklich weiterentwickelt. Was sich jedoch weiterentwickelt hat, ist die BCL. Wenn Sie eine .NET 3.5-Anwendung auf einem .NET 2-Computer ausführen, besteht das Hauptproblem nicht darin, dass der "Bytecode" (CIL) nicht kompatibel ist (dies ist nicht der Fall), sondern dass die Anwendung möglicherweise darauf verweist und diese verwendet Typen, die in der .NET 2 BCL noch nicht verfügbar waren.
Wenn Sie Visual Studio 2010 jetzt anweisen, auf .NET Framework 3.5 abzuzielen, wird sichergestellt, dass Sie keine BCL-Typen aus einer späteren Framework-Version verwenden. Außerdem wird sichergestellt, dass für den vom C # -Compiler ausgegebenen Code keine Funktionen erforderlich sind, die nur in der CLR-Version 4 verfügbar sind.
Die C # -Sprachenversion hat damit sehr wenig zu tun. Was der C # -Compiler wirklich tut, um Ihren Quellcode in eine viel niedrigere Programmiersprache namens CIL (Common Intermediate Language) zu übersetzen. Bestimmte C # -Sprachenkonstrukte sind in CIL nicht mehr erkennbar: Zum Beispiel yield return
und yield break
in CIL nicht vorhanden. Sie werden einfach in Implementierungen der IEnumerator<T>
Schnittstelle übersetzt.
Um dies zusammenzufassen: Die C # -Sprachenversion wird irrelevant, sobald Ihr Code kompiliert wird. Was ist wichtig ist ...
ob die Ausgabe-CIL / "Bytecode" mit dem Ziel-.NET Framework kompatibel ist (wenn Sie auf .NET 3.5 abzielen, ist es aus den oben genannten Gründen auch mit .NET 2 kompatibel); und
ob Ihr Code auf Typen verweist / diese verwendet, die im Zielframework verfügbar sind.
Eine bemerkenswerte Ausnahme (in dem Sinne, dass ein C # -Sprachenkonstrukt eine bestimmte Version des Frameworks erfordert; dies war zuletzt der Fall, als Generika IIRC eingeführt wurden) könnte das C # -Schlüsselwort sein dynamic
. Es kann zu Code kompiliert werden, der Typen aus dem System.Dynamic
Namespace erfordert , der erst seit .NET 4 verfügbar ist. Aber keine Sorge: Wenn Sie Ihr Visual Studio 2010-Projekt so eingerichtet haben, dass es auf .NET 3.5 abzielt, sollten Sie einen erhalten Compilerfehler, wenn Sie versuchen, Inhalte zu verwenden, die für diese bestimmte .NET Framework-Version nicht verfügbar oder mit dieser kompatibel sind.
Beachten Sie, dass VS2010 keine unterstützte IDE für die 9.3-Entwicklung ist. Sie erhalten keine Assemblyreferenzen, Hilfe oder Vorlagenintegration.
Sie können es jedoch irgendwie zum Laufen bringen : http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1