ArcObjects 9.3のC#バージョン


10

ターゲットフレームワークを.NET 3.5に設定してC#4.0を使用して、ArcMap 9.3の拡張機能を開発できますか?それともC#3.0以前でなければなりませんか?


ターゲットフレームワーク3.5の場合、拡張機能付きのC#2.0を使用しています。ArcEngine 10は.NET 3.5をターゲットにする必要があるため、4.0のいくつかの機能を利用できません。アプリでwpfカレンダーコントロールを使用したかったのですが、それが4.0であるため使用できませんでした。だから私はwinformsを使わなければなりませんでした。
パトリック

C#4.0を使用して、ターゲットフレームワークを3.5に設定したArcMap 10の拡張機能を開発していたため、フレームワークが3.5のままである限り、下位互換性があるかどうか疑問に思いました。ArcMap 10拡張機能をC#2.0に変更して、コードを何度も編集せずにArcMap 9で再コンパイルできるようにする必要がありますか?C#3.0はArcMap 9で動作しますか?
マイクロジャース

回答:


13

短い答え:私の経験では、明示的に.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 returnyield breakCILには存在しません。それらは単に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バージョンで利用できない、または互換性のないものを使用しようとすると、コンパイラエラーが発生します。


1
@SeaJunk、これは完全に正しくはありません。ArcGIS 9.3 / VS2010のESRI SDK拡張がない場合でも、これによってArcGISアセンブリを参照し、コードの記述を開始することはできます。つまり、そのIDEを使用することは依然として可能であり、より不快なだけです。また、手動による作業(コンポーネントの登録など)がさらに必要になる場合もありますが、これも可能です。
stakx

はい

良い説明を提供しましたが、3つすべて(CLR、BCL、C#)の機能は互いに大きく影響し合うため、関係はもう少し複雑です。
ペトルクレブス

ちなみに、CLRとC#の進化についての興味深い興味深い事実もほとんどありません。たとえば、ジェネリック型パラメーターの共分散と逆分散はCLR 2.0で導入されましたが、C#4で初めて言語によるサポートが開始されました。C#3で導入されたLINQは、C。2でSystem.Runtime.CompilerServices.ExtensionAttributeを使用してシミュレートできる拡張メソッドに依存しています。
ペトルクレブス

1
Eric Lippertのブログ(blogs.msdn.com/b/ericlippert)は、.NET / C#のさまざまな暗い部分とその設計の背後にある決定に関するすばらしいリソースです。
Petr Krebs

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.