对于具有双平台“Xbox 360”和“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>
.fsproj文件中是否忽略了Condition
属性?
将项目拆分为两个糟透了。我希望当前选择的平台确定当前配置以及构建中发生的事情,而不是(例如)我在解决方案资源管理器中双击.fs代码文件时扩展了哪个项目树。有多个项目只是为了适应不同的平台,这让我有一些相当大的麻烦,甚至混淆了Intellisense(例如,当我的平台设置为Xbox 360时,不会将System.Collections.Generic.HashSet
识别为不可用)。
更新:我设法让它运作起来。我的错误是希望解决方案资源管理器能够反映配置的变化,例如:对于F#项目中的引用实际显示相关引用,因为我习惯于使用条件标记查看C#项目。显然,当涉及条件时(不幸的是),F#项目在参考文献部分中根本不显示任何内容。
一旦我超越了解决方案资源管理器在平台更改后准确反映相关资产的假设,我就能够专注于解决方案的其他方面(即,配置管理器和C#中的F#项目参考)项目)需要更多关注。
感谢您的协助!我更愿意将积分奖励给Preet Sangha,因为正是他的问题提供了让我能够超越上述假设的洞察力。
答案 0 :(得分:2)
这应该只是一个MSBuild的东西,并且应该有用......运行msbuild -v:diag ...
来诊断出错的地方可能很有用;也许事情在项目文件中的顺序错误了?