linux / windows / mac /その他のプラットフォーム用のC#コードを作成したいと考えており、ポータブルコードのベストプラクティスを探しています。
Project monoには、優れた移植リソースがいくつかあります。
ポータブルC#のベストプラクティスは何ですか?
linux / windows / mac /その他のプラットフォーム用のC#コードを作成したいと考えており、ポータブルコードのベストプラクティスを探しています。
Project monoには、優れた移植リソースがいくつかあります。
ポータブルC#のベストプラクティスは何ですか?
私は「ベスト プラクティス」という用語を嫌います。なぜなら、いくつかのプラクティスがどのような状況でもベストになる可能性があるためです。これは危険なことですが、マルチプラットフォーム コード (およびほとんどのコード他のタイプの開発):
継続的インテグレーション エンジンを使用して、常にすべてのターゲット プラットフォーム向けにビルドします。
複雑すぎますか?本当に複数のプラットフォームをサポートする必要がある場合は、それを実行することをお勧めします。コードとライブラリの使用にどれほど注意を払っていても、テストが遅すぎると、アプリの大部分を作り直すのに何時間も費やしていることに気付くでしょう。
私は実際にwinformsを使用しましたが、問題ありませんでした。それはBUTT UGLYでしたが、うまくいきました。
明らかに、P/Invoke やレジストリのような win32 のものは使用しないでください。また、サードパーティの DLL にも注意してください。たとえば、OSX/Linux で実行したい場合は、実際にネイティブ コードが含まれているサード パーティの SQLite dll を使用しています。
ファイル名とパスの操作に関係するものに注意し、System.IO.Pathの移植可能な .NET メソッドを利用してください。
それ以外の:
string myfile = somepath + "\\file.txt";
行う:
string myfile = Path.Combine(somepath, "file.txt");
パスセパレーターを指定する必要がある場合は、Path.Separatorなどを使用します。
改行には「\r\n」を使用しないでください。Environment.NewLineを使用する
覚えて :
LE:一部の新しいMacOSは、「\r」行区切り記号を使用しなくなったようです。
GUI に Windows.Forms を使用しないでください。Gtk# は、クロス プラットフォームの GUI に対してより一貫性があり、信頼性があります。
数年前であれば、クロスプラットフォームの .NET に関する私の本を購入するようにアドバイスしていましたが、この本はやや古くなっているため、Mono サイトの情報に固執する必要があります。
Mono Migration Analyzer (MoMA)ツールは、既存の .NET アプリケーションを分析し、移植性の問題を警告するのに非常に適していますが、新しいコードに対する最善の策は、開発作業に Mono の最新の安定したバージョンを使用することです。
Orion が言ったように、サードパーティの DLL を使用するときは注意が必要ですが、サードパーティのソフトウェアをすばやくチェックしたい場合は、共著者が P/Invoke の依存関係について DLL を分析するためのNativeProbeツールを作成しました。
MS .NET で開発することを決定した場合は、Mono でのビルドと単体テストも行うようにしてください。また、Microsoft.Win32 や System.Management 名前空間など、多くの Windows 固有の名前空間にも注意する必要があります。
他にも簡単なものがあります。パス文字を想定しないように。または改行。
私は、Linux または OSX 上の Mono で NUnit を定期的にコンパイルする人の 1 人です。
また、コンパイラがまったく同じように動作するとは限りません。最近、MS C# コンパイラーが Mono コンパイラーに含まれていないものを組み込んでいるように見えるという問題が見つかりました。ビルド スクリプトに追加の参照が必要です。
それ以外は、かなり簡単です。Mono/Linux で初めて GUI を実行したときのことを覚えています。とてもエキサイティングでした (かなり醜いものでしたが)。
不足している項目が 1 つあります。ファイル名で大文字と小文字が区別されるようにしてください。File.Open ("MyFile.txt"); ファイルの名前が myfile.txt の場合、Unix では動作しません。
コードを移植可能にしたい場合は、Mono サイトで完成した機能のリストをよく確認する必要があります。フレームワークの各クラスと完成度のレベルについて詳しく説明しています。設計プロセス中にこれらのことを考慮に入れる必要があります。これにより、道をたどりすぎて、重要な機能がまだ実装されていないことに気付くことはありません。