2

私は現在、ソースコードを可能な限り移植可能にするプロジェクトに取り組んでいます。つまり、プロジェクト (C# ですが、あまり関係ありません) は、Android (Mono-Android を使用)、iPhone (MonoTouch を使用)、および WinMobile (公式の Compact Framework を使用) で実行する必要があるアプリケーションを表します。詳細は省きますが、対応する MSBuild ソリューションは、(少なくともソース コードの観点からは) 独立したプラットフォーム ライブラリで構成されており、さまざまなプラットフォームに共通ではない各機能の抽象化を表すさまざまなインターフェイスとクラスを宣言しています (つまり、UI)。さらに、「基本ライブラリ」を (プラットフォームごとに) 特化した対応ライブラリがあります。効果的なアプリケーション実行可能ファイルは、抽象化と共通の標準ライブラリを使用するプログラムです。

WinMobile と Android での開発は実際には問題ではありません。Mono-Android アドインは VS 2010 にインストールできるため、両方のプラットフォームを MS VS で処理できます。

最初にソリューションは VS で作成されたため、初期構成と関連プロジェクト (Android および WinMobile) が自動的に生成されます。

その後、Mac (MonoTouch で公式にサポートされている唯一のプラットフォーム) の MonoDevelop にソリューションをインポートし、iPhone ライブラリのプロジェクトを作成しました。構成を切り替えてアセンブリ (iPhoneSimulator) を生成すると、プロジェクト タイプの構成が欠落しているため、「ベース ライブラリ」をコンパイルできませんでした。具体的には、MonoTouch で使用される GUID は次のとおり<ProjectTypeGuids>です{E613F3A2-FE9C-494F-B74E-F63BCB86FEA6}。この GUID を追加すると、MonoDevelop で「基本ライブラリ」をコンパイルできるようになります。

VS でソリューションを再インポートしようとすると、問題が発生します。MonoTouch の Windows バージョンがないため、VS は指定されたプロジェクト タイプのアドインを見つけることができず、プロジェクトは読み込まれません。

MSBuild プロジェクト ファイルの仕様を見ると、VS のプロジェクト/ソリューション エディター内で設定または変更できないオプションがたくさんあるようです。しかし、フォーマットは非常に複雑で、今私はあなたの助けを求めています!

使用している環境に対して特定の構成が個別に選択されている場合にのみ、プロジェクト タイプが存在することをプロジェクト ファイルで指定する方法はありますか?

4

2 に答える 2

3

一般的なアプローチは次のようなものです。プロパティがすでに持っている可能性のある値を参照して、プロパティを段階的に構築する条件:

<ProjectTypeGuids
   Condition="'$(BuildingInsideVisualStudio)' != 'true'"
   >;{E613F3A2-FE9C-494F-B74E-F63BCB86FEA6}"</ProjectTypeGuids>
<ProjectTypeGuids>{OTHER-GUIDS-HERE}$(ProjectTypeGuids)</ProjectTypeGuids>

これにより、VS状態(ビルド時)が検出され、不明なGUIDが省略されます。ただし、プロジェクトを開いたときに機能するかどうかはわかりませんが、このプロパティは建物にのみ適用される可能性があります。モノで構築するための同様の「センティナル」プロパティがあるかもしれません、そしてあなたは条件を逆転させることができます。

于 2011-05-11T14:08:37.943 に答える
0

私は、Linux と Windows の間を行き来するときに不自然に見えるファイルを除外することで、クロスプラットフォーム開発の無関係ではあるが非常によく似た問題を解決しました。私は自分のプロジェクトをソース管理下に置き、それを利用して物事を協調的に機能させています。 http://www.aydabtudev.com/2011/05/what-goes-into-source-control-android.html

あなたの問題に対する 1 対 1 の回答ではありませんが、問題を解決する方法についての手がかりやアイデアが得られる可能性があります。

于 2011-05-11T13:38:48.830 に答える