2

ソリューションに ProjectA と ProjectB (どちらも MonoTouch アプリ) と ProjectBase の 2 つのプロジェクトがあるとします。ProjectBase にはアプリケーション全体が含まれていますが、Main.cs ファイル (エントリ ポイントを含む) は ProjectA と ProjectB (ProjectBase を参照) にあります。このように、A/B プロジェクトを実行すると、ProjectBase からアプリケーションが起動します。

ここで、ProjectA のみに対して何かをオーバーライドしたいと考えています (XIB ファイル、イメージ、または .NET クラスの可能性があります)。ProjectBase によって生成されたコードとリソースが ProjectA/ProjectB のものとマージされ、後者が勝つようにソリューションをセットアップする方法はありますか?

XIBをオーバーライドする方法を見つけました(おそらく風変わりで未定義の動作主導の方法です):XIBをProjectAとProjectBに入れ、ProjectBaseで名前が付けられたのと同じ名前を付け、ProjectBaseから除外します。MonoDevelop はすべてのアイテムをコンパイルしますが、スタートアップ プロジェクトの XIB が優先されるようで、ProjectA を起動すると ProjectA 固有の XIB が表示され、ProjectB を起動すると ProjectB 固有の XIB が表示されます。ただし、それが本来の動作であるかどうかはわかりません。さらに、ビルド ログから確認できることから、すべてのプロジェクトがビルドされ、最後にリソースが生成されます。

PSこれが以前に尋ねられた場合は申し訳ありませんが、SOで同様の質問を見つけることができませんでした.

4

1 に答える 1

1

私はかつて、たくさんのアプリでこれをやろうとしていました。ビルド順序は ProjectBase、次に ProjectA であり、コンテンツ コピー システムも同じであると考えていたでしょう...これは、私たちが間違っていることを意味していると思います。

いくつかのことができます。

A) 独自のプログラムを作成して、コンテンツとしてマークされたリソースをコピーします。.csproj ファイルを読み取るだけで済みます。.NET では、XML の解析は非常に簡単です。ビルド後にこのプログラムを実行します。ビルド後のイベントをどのように処理するかわからないため、zip やデバイスなどのビルドを行うときは注意が必要です。

B) [これは私が代わりに行ったことです] ProjectC、ProjectD ... ProjectN も作成する予定がある場合は、代わりに自分のプログラムを生成するプログラムを作成しました... (Programception)。それが何をするか、ProjectBase と ProjectTempalte があります。このプログラムに新しいプロジェクト名 (「MyNewProject」など) を入力すると、正しいフォルダー構造が作成され、正しい csproj ファイルが書き込まれ、SLN ファイルが更新されます。ProjectTemplate には、{PLACEHOLDER} のような .csproj ファイルにさまざまなプレースホルダーがあり、Programception が通過してプロジェクト名で検索/置換します。画像ファイル(およびあなたの場合はXIB)は、ProjectA(B..C..N)内にのみ保持されます。ただし、それらを上書きしようとしない限り、ProjectBaseにとどまります。これは、私が想定する XIBless アプリケーションを使用すると、はるかに簡単になります。とにかく、私は決してXIBを使用しません。

それが役立つことを願っています!

于 2012-11-15T05:34:17.480 に答える