デュアルプラットフォーム「Xbox360」と「x86」を使用するF#プロジェクトの場合、プロジェクトファイルに次のものがあります。
<ItemGroup Condition="'$(Platform)' == 'Xbox 360'">
<Reference Include="Arands.ContentTracker.Xbox">
<HintPath>..\..\..\..\..\..\_Libs\XNA\ContentTracker\ContentTracker\bin\Xbox 360\Release\Arands.ContentTracker.Xbox.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x86'">
<Reference Include="Arands.ContentTracker">
<HintPath>..\..\..\..\..\..\_Libs\XNA\ContentTracker\ContentTracker\bin\x86\Release\Arands.ContentTracker.dll</HintPath>
</Reference>
</ItemGroup>
何らかの理由で、選択したプラットフォーム(Xbox 360またはx86)に関係なく、Arands.ContentTracker.dllもArands.ContentTracker.Xbox.dllもプロジェクトの参照として追加されません。
結果は次の場合と同じです。
<Reference Condition="'$(Platform)' == 'Xbox 360'" Include="Arands.ContentTracker.Xbox">
<HintPath>..\..\..\..\..\..\_Libs\XNA\ContentTracker\ContentTracker\bin\Xbox 360\Release\Arands.ContentTracker.Xbox.dll</HintPath>
</Reference>
<Reference Condition="'$(Platform)' == 'x86'" Include="Arands.ContentTracker">
<HintPath>..\..\..\..\..\..\_Libs\XNA\ContentTracker\ContentTracker\bin\x86\Release\Arands.ContentTracker.dll</HintPath>
</Reference>
属性はCondition
.fsprojファイルで単に無視されますか?
プロジェクトを2つのサックに分割します。ソリューションエクスプローラーで.fsコードファイルをダブルクリックしたときに展開したプロジェクトツリーではなく、現在選択されているプラットフォームで現在の構成とビルドで何が行われるかを決定する必要があります。異なるプラットフォームに対応するためだけに複数のプロジェクトがあると、かなり大きな頭痛の種になり、Intellisenseを混乱させることさえあります(たとえばSystem.Collections.Generic.HashSet
、プラットフォームがXbox 360に設定されているときに利用できないと識別されない)。
更新:私はそれを機能させることができました。私の間違いは、ソリューションエクスプローラーが構成の変更を反映することを期待していました。たとえば、条件付きタグを持つC#プロジェクトで見慣れているように、F#プロジェクトの参照が実際に関連する参照を表示するためです。どうやら、F#プロジェクトでは、条件が関係している場合(残念ながら)、[参照]セクションに何も表示されないようです。
プラットフォームの変更後にソリューションエクスプローラーが関連するアセットを正確に反映するという仮定を乗り越えた後、ソリューションの他の領域(つまり、構成マネージャーとC#プロジェクトのF#プロジェクトへの参照)に焦点を当てることができました。もっと注意が必要でした。
皆様のご協力に感謝します!私が前述の仮定を乗り越えることができた洞察を提供したのは彼の質問だったので、私はPreetSanghaにポイントを与えたいと思います。