前回から、Option.iniが読めてないのは見事的中しました。
Windowsでは「\」をパスに利用しますが、Linuxでは「/」を利用します。ここにリテラルで「\」があったために、パスを拾えていなかったようです。これは、System.IO.Path.Combineメソッドを利用して対処しました。
でも、なんでこれで大丈夫なのだろうか?
という疑問が出てきましたので、ちょっとだけソースを追いかけてみました。
こうした環境の違いがあるために、.Net CoreのライブラリではPlatformによる違いを吸収する方法をとっているようです。
これが、Bjd(アプリ)が直接利用しているPathクラスの中身。(正確なバージョンまでは未確認。きっと多分)
System.Runtime.Extensions System/IO/Path.cs
中では「DirectorySeparatorCharAsString 」というフィールドを利用して、結合していますが、この実体はここにいません。
分割クラス(partial)となっており、
System.Runtime.Extensions System/IO/Path.Windows.cs
System.Runtime.Extensions System/IO/Path.Unix.cs
という風に複数定義されたものがありました。Unixでは「/」Windowsでは「\」(エスケープのため2文字なだけ)となっています。
これは、以下のプロジェクトファイルでターゲット($(TargetsUnix)、$(TargetsWindows))による切り替えが確認できます。
System.Runtime.Extensions.CoreCLR.csproj
つまり、プラットフォームごとに作られているものが違うということですね。
でも
こ、今度は、BeginReceiveがないですと!!ポートが使われているよーはサービスを止めればよいとして、Windowsでは動いてるのに!!これも追いかけていこうじゃないですか!
それでは、また