ターゲットフレームワークを.NET 3.5に設定してC#4.0を使用して、ArcMap 9.3の拡張機能を開発できますか?それともC#3.0以前でなければなりませんか?
ターゲットフレームワークを.NET 3.5に設定してC#4.0を使用して、ArcMap 9.3の拡張機能を開発できますか?それともC#3.0以前でなければなりませんか?
回答:
短い答え:私の経験では、明示的に.NET Framework 3.5を対象とする限り、Visual Studio 2010(C#言語バージョン4)でArcGIS 9.3用の.NET 3.5ベースのコードを開発することはまったく問題ありません。ここでは、C#言語バージョンはほとんど関係ありません。
PS:この回答は、バージョン9.3と10のArcGISエクステンションの開発に存在する違いには入りません(ESRIはアドインモデルにかなりの数の大きな変更を加えましたが、 。)
より長い答え: C#言語バージョンと対象となるFrameworkバージョンを区別する必要があります。
.NET Frameworkは、CLR(共通言語ランタイム)とBCL(基本クラスライブラリ)の2つの主要な部分で構成されていると考えることができます。前者は「仮想マシン」であり、後者はクラスライブラリ(MSDNで検索できるすべてのタイプを含む)です。
.NET Frameworks 2から3.5まではすべて同じCLR(バージョン2)を使用しています。つまり、実行環境は実際には進化していません。しかし、進化したのはBCLです。.NET 2マシンで.NET 3.5アプリケーションを実行している場合、主な問題は「バイトコード」(CIL)に互換性がないことではなく(互換性がない)、アプリケーションが参照して使用する可能性があることです。 .NET 2 BCLではまだ利用できないタイプ。
これで、.NET Framework 3.5を対象とするようにVisual Studio 2010に指示すると、それ以降のFrameworkバージョンのBCLタイプを使用しないことが確認されます。また、C#コンパイラによって出力されるコードが、CLRバージョン4でのみ利用可能な機能を必要としないことも確認します。
C#言語バージョンは、これらすべてとはほとんど関係がありません。ソースコードを取得し、CIL(Common Intermediate Language)と呼ばれるはるかに低レベルのプログラミング言語に変換するために、C#コンパイラが実際に行うこと。たとえば、:特定のC#言語の構文は、もはやCILで認識できないだろうyield return
とyield break
CILには存在しません。それらは単にIEnumerator<T>
インターフェースの実装に変換されます。
まとめると、コードがコンパイルされるとすぐに、C#言語バージョンは無関係になります。何であることが重要です...
出力CIL /「バイトコード」が対象の.NET Frameworkと互換性があるかどうか(.NET 3.5を対象とする場合、上記の理由により.NET 2でも互換性があります)。そして
コードが/を参照するかどうか、またはターゲットフレームワークで使用可能なタイプを使用するかどうか。
注目すべき例外の1つ(C#言語の構成にはフレームワークの特定のバージョンが必要であるという意味で、ジェネリックがIIRCに導入された最後のケース)は、C#キーワードdynamic
です。System.Dynamic
名前空間の型を必要とするコードにコンパイルされる場合があります。これは.NET 4以降でのみ使用できます。ただし、心配しないでください。.NET3.5をターゲットにするようにVisual Studio 2010プロジェクトを設定した場合は、特定の.NET Frameworkバージョンで利用できない、または互換性のないものを使用しようとすると、コンパイラエラーが発生します。
VS2010は9.3開発でサポートされているIDEではないことに注意してください。アセンブリ参照、ヘルプ、またはテンプレートの統合はありません。
ただし、動作させることもできます:http : //forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1