Visual Studio 2010 to Visual Studio 2019

弊現場(ブログ主が働いているところ)ではVisual Studio 2010(以下VS2010)を使ってC#でWinFormsのアプリ(以下弊アプリ)を開発しています。

f:id:turkey_pc:20190520225505p:plain

弊現場のソリューション(嘘んこ)

 

ある日、天(弊アプリの販売元)より「VS2010ってのも古いんやろ。元号変わったことやさかいにVisual Studio 2019(以下VS2019)にしよか?」という啓示を頂きました。

 

はいはーい。VS2019をインストールしてslnファイルをダブルクリックしてビルドしたらおk・・・ありり??

f:id:turkey_pc:20190520230951p:plain

 

過去の資産を継承は難しいのかとガッカリしたが、とりあえずエラーをなんとかできないかと考えてみた。どうやら一番最初の「予期しない文字'・'」ってのが諸悪の根源のようなので、該当箇所を見た。

f:id:turkey_pc:20190520231450p:plain

 

ここである。たしかに'・'である。VS2019はこれを予期できないというのか?なぜだ?わからないときはGoogleの出番である。

[C# ユニコード][検索]

 

ktkr

 

ufcpp.net

 

 

'・'は「カタカナ中点」っていうのか・・・じゃなくて!識別子に使えないってか!!

 

じゃ、しかたね。VS2019でエラーになってる識別子をVS2010で変数名の変更しておくかー・・・・

 

以下、眠いので明日に続く(はず)。

 

 

 あ、わすれてた。

VS2010ではビルドできるけどVS2019ではビルドできない状態のを

github.com

に乗せてみた。もちろんエラー再現用に作ったサンプルでありんす。実際のコード上げたらえらいことになる(法律的にも倫理的にもサイズ的にも)

 

 

Head Firstオブジェクト指向分析設計 ――頭とからだで覚えるオブジェクト指向の基本を読み始めた

芸事を学ぶのは「守破離」と申しますが、プログラミングという大いなる芸事におきまして「守」の段階が終わりませぬ。

というわけで、↓を読み始めました。

 

www.oreilly.co.jp

 

まずは手を動かそうとサンプルコードを読み・・・おっとJavaだ。

読めるけど自分がメインとしているC#に引き込んでみよう。

というわけで、まずはギター在庫検索システム<Rickが顧客を失い始めたバージョン>のコードをGitHubに上げてみました。

github.com

 

ここからバグ取りとコード改善が始まるのですが、さてどこまでできることやら。

 

<追記 C#に移植してみて>

JavaからC#ですからほぼまるまるコピーして少々編集で済みそうなものですが、余計な気持ちだしてC#らしくなるよういじっています。

①Guitar.cs

 getter,setterはプロパティにしました。

②Inventory.cs

 getGuitarメソッドの中身はLINQのFirstOrDefaultメソッドにしました。

 文字列の空文字判定はstring.IsNullOrEmptyメソッドにしました。

 searchメソッドのループ処理をforからforeachにしました。

  ※判定部分をFuncに切り出したらLINQのFirstOrDefaultになりそうですが、どうせ後の展開でGuitarメソッドに移すのでここは放置しました。

③FindGuitarTester.cs

 Mainメソッドの文字列生成に書式指定項目({0}~{5})とやらを使っています。この部分はGuitarクラスに移すべきものか否かわかりません。

 

<追記 文字列比較の放棄 の実装>

stringをenumに置き換えるというだけ。C#ではenumにメソッドを配置できないんでそこは除外しているがToStringしたら勝手にenumの文字にしてくれるのでとりあえずはそれでOKにしておく。本では全大文字から先頭大文字に変換しているがめんどくさいので省略(どうしてもというならenumのほうを先頭大文字にすればOK)。

 

 

 

Visual Studio Codeでコード書いてGitHubに上げてみた。

当記事は

www.micknabewata.com

を読み、私自身が手を動かして自分だけが読めるようにしたメモでつ

(いわば劣化バージョン)。

運悪くググって当記事(劣化バージョン)に当たった人は、本家本元↑の方のを読むべきです。

 

 

 

 

ざっくりな手順

思い出しながら書いているので抜けや順序の入れ違いあるかも。

 

 

GitHubリポジトリ作る
VSCodeを立ち上げてTerminalで
 git clone [リポジトリのURL]
 ↑でできたフォルダ(以下開発フォルダ)に移動
 dotnet new console

開発フォルダに.gitignoreファイルを作成

 <内容>

  bin/
  obj/

 </内容>

以下、ずっとVSCodeのターン。

 開発フォルダを開く。

 (ここでめくるめくコーディングの世界があるが省略)

 キリのいいとこでコミットしてプッシュ

 

 

ということで、上記の練習でコーディングしたのはというと・・・

(続きはWebで)

 

 

ああ、わすれてた。

Visual Studio Codeつこてみた。

Hello worldまで動いたあとで手順を思い出してるので抜けや順序入れ替わりあるかも。

 

Visual Studio Code(以下VSCode)をインストール
VSCodeを立ち上げてExtention C# for Visual Studio Code (powered by OmniSharp).を追加
③.NET Core SDKをインストール

VSCodeでFile→Open Folderで適当なフォルダを作成し、作成したフォルダを選択

VSCodeでView→Terminal

⑥TERMINAL(ウインドウの右下ペイン)にてdotnet new console

⑦Program.cs(ウインドウの左ペイン)をクリック

⑧コードを見る

TERMINAL(ウインドウの右下ペイン)にてdotnet run

Hello World!と表示される。

おしまひ。

 

 

・・・って、そのまんま↓なんでまともな読解力がある人は↓を見ませう。

docs.microsoft.com

 

 

 

個人メモ

<出力ファイル(テキストファイル)の要求仕様書(以下仕様書)>

 ・元号は"平成"もしくは新元号のみと明記

 

<アプリケーションの動作> 
 ・入力画面にて日付を入力(入力部品にて平成1年1月8日より前の日付については再入力を求めていて昭和以前の元号は入力できない
 ・入力した日付の元号を和暦の文字列に変換してテキストファイル出力

 

・・・

 

としたコードを書いたところ、テキストファイル出力部分のコードレビューでケチが。仕様書以外の出力をしないようにコードで制限しろと。

 

つまりは

if (元号=="平成" || 元号=="新元号"){

 //出力ロジック

 (以下略)

}else{

 //出力しないお

 (以下略)

}

 

と書けと。

書くのはいいがelseブロックに入るテストはできないやん。?

例外投げちゃうぞ。それでもいいのか?

 

 

 

 

 

DeskMiniA300出るんだってさ。

その筋(どの筋?)で有名なASRockからMini-STXベースのベアボーンの最新作DeskMini A300出るんだってさ。

www.asrock.com

 

DeskMini A300(以下A300)にRyzen 5 2400G突っ込めば4Core8ThreadのPCがお安く構築できる。

 

なんだが、現在私はDeskMini 110(以下110)+Corei3-7100のPCを所有している。CPUをi7-7700に換装しても4Core8ThreadのPCができあがる。

 

というわけで、比較をしてみた。

f:id:turkey_pc:20190112094604p:plain

110を延命するほうがA300で新築するよりも半値ぐらいでいけるのである。

これは悩みどこr・・・・

 

 

な・わ・け・な・い

 

 

新築するに決まってる。Ryzenだよ。あの4歳牝馬特別で杉本清を絶句させた末脚(それはライデンリーダー

 

 

というわけで月末に向けてRyzen貯金をしよう。

ClosedXMLで数式を設定したみたけど動かないことがあったのさ

ようよう調べたら環境の問題やろなと。

 

 

条件:ターゲットとなるファイルはネットワークドライブに置いてある

 

・ターゲットファイルにClosedXMLで数式を設定する

・↑の時点では数式は実行されない

  ∵ClosedXMLはファイルの中身をいじるだけで計算の機能はないはず

・ターゲットファイルを開くも保護ビューのため数式は実行されない

 

保護ビューを解除するかターゲットファイルをローカルにコピーしてから開けばきちんと数式が実行されました。めでたしめでたし。