プロジェクト

全般

プロフィール

Visual StudioとC#を使ってみた感想

高橋 徹 さんが約10年前に追加

Windows上で既に半分作られていたアプリケーションがあり、それに地図表示機能を追加したいという状況がありました。
ArcGISには、.NET Framework用の開発ライブラリ(ArcGIS Engine)があるので、それを使う可能性を探るべく、まず雛形となる地図表示を.NETで作成してみることにしました。

ArcGIS Engineは、Java版での開発経験がありますが、.NET版は初めてです。Visual Studioは、昔C++の開発で使った経験はありますが、C#はほとんど初めてです。

  • 環境
    • OS: Windows 7 64bit版
    • Visual Studio 2010 Professional
    • ArcGIS Engine Runtime 10.2
    • ArcObjects .NET SDK 10.2

返答 (7)

C#のusingディレクティブは名前空間までしか指定できない - 高橋 徹 さんが約10年前に追加

困りました。既存のソースに追加するとき、あとからusingディレクティブ追加し、その名前空間内に既に使用している別名前空間の型と同じ型名があるとたとえコードでは片方しか使わなくてもコンパイルエラーになってしまいます。
回避方法は、

回避方法はなんか釈然としませんが、Microsoft流な解決方法です。

Visual Studioでは複数ソリューションに属するプロジェクトを同時に開けない - 高橋 徹 さんが約10年前に追加

新しいプロジェクトで作業をしていて、以前作成したプロジェクトを参照したくなったのでプロジェクトを開いたところ、今作業していたプロジェクトが閉じてしまいました。ここで同時に開きたいプロジェクトは、それぞれ別なソリューションに属するプロジェクトでした。

どうやら、Visual Studioでは、ソリューションを1つだけ開き、その中のプロジェクトを複数表示(作業)することはできますが、ソリューションが異なると同時には扱えないようです。

回避方法は、
  • どちらかのソリューションにプロジェクトを集める
  • 新しいソリューションを作ってそこにプロジェクトを集める
  • 複数のVisual Studioを起動し、それぞれでソリューションを開く
    しかなさそうです。

なんだかなぁ

C#のプロパティとsetterメソッド - 高橋 徹 さんが約10年前に追加

ArcObjectsのIProjectedCoordinateSystemインタフェースには、CentralMeridianプロパティが定義されています。
http://resources.arcgis.com/en/help/arcobjects-net/componenthelp/index.html#/CentralMeridian_Property/002m000002z3000000/

CentralMeridianプロパティは、真偽値と倍精度浮動小数点の2つからなる情報です。上述のリファレンスマニュアルによれば、C#でこのプロパティを変更するには、

IProjectedCoordinateSystem proj = ...
proj.set_CentralMeridian(true, 139.8);

と2つの引数を取るsetメソッドを呼ぶようになっています。

プロパティは便利という声をよく聞きますが、プリミティブ・データ型ではなくオブジェクト型の場合、オブジェクトを生成して代入するコーディングと、プリミティブデータ型複数を引数に取るsetメソッドとどちらがシンプルかというと、後者かなと思います。

c#では、プロパティの代入式とsetメソッドとが混在して、ごちゃごちゃ感が大です。

Visual Studio 2010でデバッグ実行中のソースコード編集 - 高橋 徹 さんが約10年前に追加

Visual Studio でデバッグ開始でプログラムを実行しているときは、ソースコードの編集ができなくなります。
エディットコンティニューを有効(デフォルト)にしていると、デバッグを中断([デバッグ]メニュー > [すべて中断])すると、編集できるようになります。

頻繁にデバッグと編集をすると、いちいちデバッグを中断する操作が煩わしいです。
また、デバッグを中断すると、複数のソースファイルを開いているとなぜかMain関数のあるソースファイルがアクティブな状態になります。

異なる.NET Frameworkバージョン向けのライブラリを作成する方法 - 高橋 徹 さんが9年以上前に追加

次のブログに、同じソースファイルのプロジェクトを.NET Framework 4向け、.NET Framework 3.5向けの複数のアセンブリを作る方法について紹介がありました。
VS2010で複数のバージョンのフレームワーク対応のライブラリを作る

ソリューションを1つ作成し、その下に.NET Framework 4用、.NET Framework 3.5用のプロジェクトを作成します。
ルート名前空間は同一にしておき、片方のプロジェクトにソースファイルを作成し、もう一つのプロジェクトは既存ファイルの追加で「リンクとして追加」します。
これで、同じソースファイルが複数のプロジェクトに配置され、それぞれのプロジェクトをビルドすることで複数のアセンブリが作成されます。

Visual StudioのXAMLビジュアル編集 - 高橋 徹 さんが7年以上前に追加

Visual Studio 2015でWPFアプリケーションのXAML編集をビジュアルに実施してみた。

  • Grid で、Grid.RowDefinitionとGrid.ColumnDefinitionをビジュアルに作成するのはトリッキー
    Gridの横/上の端で微妙な位置をマウスクリックすると生成された
    プロパティペインにはRowDefinition/ColumnDefinitionはない
    Visual Studioのビジュアル編集機能でGrid内へのコントロールの配置は困難、プロパティペインであれやこれやを設定して結果だけビジュアルに見れる程度、これならXAMLを直接記述する方が早い
  • コントロールのイベントを既存のメソッドに結び付ける際、プロパティペインにはメソッド名をフル記述する必要がある
    初心者向け解説は一様に、コントロールをダブルクリックするとデフォルトのメソッド名で自動生成されるやり方

.NET Frameworkの今後 - 高橋 徹 さんが4年以上前に追加

「.NET Frameworkが無くなるらしい」との噂を聞いたので情報集め。

  • .NET Framework 4.8が最後のメジャーバージョンで、以降は保守フェーズ(バグ修正、セキュリティアップデート)
  • .NET Frameworkとは別に開発されている.NET Core がこれからメインになる
  • .NET Coreは、2019年9月に3.0リリース予定、次のメジャーバージョンは5.0で2020年末頃にリリース予定
    • 4.0を飛ばしたのは、.NET Frameworkのバージョンとの混乱を避けるためらしい
    • .NET 5 は、.NET Core 5.0と同義で、現在の.NET Framework、.NET Core、Monoを1つに統合し、Windows、Linux、macOS、iOS、Android、tvOS、watchOS、WebAssemblyを統一するもののよう
  • .NET Coreは.NET Frameworkのスーパーセットではないが、共通する部分では同じAPIを有している。
  • GUIについては、.NET Core 3.0以降でWPFとWindows Formsは用意されている
    • WPFの画面作成ツール、WindowsFormsの画面作成ツールは.NET 3.0のリリースから遅れてリリースされる模様
  • Entity Frameworkは、Core版があるが非互換
  • WCFはない
  • .NET CoreのCLRは、CoreCLRで、RyuJIT搭載。また、AOTではCoreRTが用意されている。
  • .NET Coreは複数バージョンを同居させられる(Side by Side復活)
  • アプリケーションにRuntimeを同梱して配布可能

なかなか思い切った舵切りです。
ただ、.NET 5.0がリリースされる2020年後半からしばらく(数年?)は開発エコシステムが移行するまで混乱が続くかもしれません。

    (1-7/7)