F#:.fsproj 文件中的某些(或所有)标记是否不支持“条件”属性



对于具有双平台"Xbox 360"和"x86"的 F# 项目,我的项目文件中有以下内容:

<ItemGroup Condition="'$(Platform)' == 'Xbox 360'">
    <Reference Include="Arands.ContentTracker.Xbox">
     <HintPath>............_LibsXNAContentTrackerContentTrackerbinXbox 360ReleaseArands.ContentTracker.Xbox.dll</HintPath>
    </Reference>
</ItemGroup>
<ItemGroup Condition="'$(Platform)' == 'x86'">
    <Reference Include="Arands.ContentTracker">
    <HintPath>............_LibsXNAContentTrackerContentTrackerbinx86ReleaseArands.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>............_LibsXNAContentTrackerContentTrackerbinXbox 360ReleaseArands.ContentTracker.Xbox.dll</HintPath>
</Reference>
<Reference Condition="'$(Platform)' == 'x86'" Include="Arands.ContentTracker">
    <HintPath>............_LibsXNAContentTrackerContentTrackerbinx86ReleaseArands.ContentTracker.dll</HintPath>
</Reference>

在 .fsproj 文件中是否简单地忽略了 Condition 属性?

将一个项目一分为二很糟糕。 我希望当前选择的平台确定当前配置以及生成中发生的情况,而不是(例如)我在解决方案资源管理器中双击 .fs 代码文件时扩展了哪个项目树。 为了适应不同的平台而拥有多个项目给我带来了一些相当严重的头痛,甚至混淆了 Intellisense(例如,当我的平台设置为 Xbox 360 时,没有将System.Collections.Generic.HashSet标识为不可用)。

更新:我已经设法让它工作了。 我的错误是期望解决方案资源管理器反映配置的更改,例如,F# 项目中的引用实际显示相关引用,就像我习惯于看到带有条件标记的 C# 项目一样。 显然,当涉及条件时,F# 项目只是在"引用"部分中不显示任何内容(不幸的是)。

一旦我超越了解决方案资源管理器将在平台更改后准确反映相关资产的假设,我就能够专注于解决方案的其他区域(即 C# 项目中的配置管理器和对 F# 项目的引用),这些区域需要更多关注。

谢谢大家的帮助! 我更愿意把分数奖励给Preet Sangha,因为正是他的问题提供了洞察力,使我能够超越上述假设。

这应该只是一个 MSBuild 的东西,应该可以工作......运行msbuild -v:diag ...来诊断出了什么问题可能很有用;也许项目文件中的内容顺序错误?

最新更新