ポータブル C# のベスト プラクティス [終了]
-
09-06-2019 - |
解決
実際に winforms を使用しましたが、問題ありませんでした。とても醜いものでしたが、うまくいきました。
当然のことですが、P/Invoke やレジストリなどの win32 のものは使用しないでください。サードパーティの DLL にも注意してください。たとえば、サードパーティの SQLite DLL を使用しますが、これには実際にはネイティブ コードが含まれており、OSX/Linux で実行する場合はこれを交換する必要があります。
他のヒント
私は「ベスト プラクティス」という言葉が嫌いです。なぜなら、一部のプラクティスはどのような状況においても最善である可能性があり、それは危険なことであるように見えるからです。しかし、マルチプラットフォーム コード (そしてほとんどのコード) にとって「良いプラクティス」であると私が考えるものをお話しします。他のタイプの開発):
継続的インテグレーション エンジンを使用し、 常にすべてのターゲット プラットフォーム向けにビルドする.
複雑すぎるように思えますか?そうですね、本当に複数のプラットフォームをサポートする必要がある場合は、そうする方がよいでしょう。コードやライブラリの使用にどれほど注意を払っていても、テストが遅すぎると、アプリの大部分を手直しするのに長い時間を費やすことになります。
ファイル名とパスの操作に関係するものに注意し、移植可能な .NET メソッドを使用してください。 System.IO.パス つまり。
の代わりに:
string myfile = somepath + "\\file.txt";
する:
string myfile = Path.Combine(somepath, "file.txt");
パス区切り文字を指定する必要がある場合は、次を使用します パス.セパレータ 等
新しい行には「 」を使用しないでください。使用 環境.改行
覚えて :
- *NIX では改行文字 (" ") のみが使用されます。
- Windows では「 」が使用されます
- MacIntosh は「 」を使用します (これについてはよくわかりません。遠慮なく修正してください)。
L.E.:一部の新しい MacOS では「 」行区切り文字が使用されなくなったようです。
GUI には Windows.Forms を使用しないでください。ただし、Mono はおそらくすでにそのことについて言及しています。Gtk# は、クロスプラットフォーム GUI においてより一貫性があり、信頼性が高くなります。
数年前なら、私はあなたに私の本を自分で購入するよう勧めていたでしょう。 本 クロスプラットフォーム .NET 上で動作しますが、この本は少々古いため、実際には Mono サイトの情報に従う必要があります。
の モノ移行アナライザー (MoMA) このツールは、既存の .NET アプリケーションを分析し、移植性の問題を警告するのに非常に優れていますが、新しいコードについては、開発作業に Mono の最新の安定バージョンを使用することが最善の策です。
Orion が言ったように、サードパーティの DLL を使用するときは注意する必要がありますが、私の共著者は ネイティブプローブ サードパーティ ソフトウェアをすぐに確認したい場合は、DLL の P/Invoke 依存関係を分析するツールを使用します。
MS .NET で開発することに決めている場合は、Mono でビルドと単体テストも行うように努める必要があります。また、Microsoft.Win32 名前空間や System.Management 名前空間など、多数の Windows 固有の名前空間にも注意する必要があります。
コードを移植可能にしたい場合は、Mono サイトで完成した機能のリストをよく確認する必要があります。フレームワーク内の各クラスと完成度のレベルについて詳しく説明します。設計プロセス中にこれらのことを考慮して、あまりにも先に進んで重要な機能がまだ実装されていないことに気付くことがないようにする必要があります。
他にも簡単なものがいくつかあります。パス文字を想定しないのと同じです。または 改行.
私は、Linux または OSX 上の Mono で NUnit を定期的にコンパイルする人の 1 人です。
また、コンパイラがまったく同じように動作すると仮定しないでください。最近、MS C# コンパイラには Mono コンパイラには含まれていないものが含まれているようで、ビルド スクリプトに追加の参照が必要になるという問題が見つかりました。
それ以外は非常に簡単でした。初めて迎えたときのことを覚えています Mono/Linux 上で実行される GUI - とても刺激的でした(たとえそうであったとしても) だった かなり醜い)
不足している項目が 1 つあります:ファイル名では大文字と小文字が区別されるようにしてください。File.Open ("MyFile.txt");ファイルの名前が myfile.txt の場合、Unix では動作しません。