我有一个C#XNA主机项目,其中包含一个包含我所有功能的F#客户端项目。它不会构建,因为F#项目引用了XNA项目不同意的mscorlib.dll和System.dll(实际错误 - 嗯,它实际上是一个警告,在我看来应该是一个错误 - 位于帖子的底部)。如何告诉F#项目以实际的XNA平台为目标(特别是对于Xbox 360)?
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3268: The primary reference "\\vmware-host\Shared Folders\Projects\FSharp\Whirlygigs\Whirlygigs.Lib\bin\Debug\Whirlygigs.Lib.dll" could not be resolved because it has an indirect dependency on the framework assembly "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0,Profile=Client". To resolve this problem, either remove the reference "\\vmware-host\Shared Folders\Projects\FSharp\Whirlygigs\Whirlygigs.Lib\bin\Debug\Whirlygigs.Lib.dll" or retarget your application to a framework version which contains "mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=***".
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3268: The primary reference "\\vmware-host\Shared Folders\Projects\FSharp\Whirlygigs\Whirlygigs.Lib\bin\Debug\Whirlygigs.Lib.dll" could not be resolved because it has an indirect dependency on the framework assembly "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v4.0,Profile=Client". To resolve this problem, either remove the reference "\\vmware-host\Shared Folders\Projects\FSharp\Whirlygigs\Whirlygigs.Lib\bin\Debug\Whirlygigs.Lib.dll" or retarget your application to a framework version which contains "System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=***".
答案 0 :(得分:4)
您遇到的问题是,您的某个项目是针对.NET Framework的Windows版本(mscorlib
,System
),而您的一个项目是针对Xbox 360版本的框架。而且,基本上,您无法将针对不同核心框架的程序集链接在一起。
我猜你的F#项目是针对Windows版本的程序集。 您需要做的是让您的F#项目定位到Xbox 360参考程序集。
(请注意,我自己从未这样做过 - 所以我的回答只是您可以尝试的一系列事项。)
作为参考,默认情况下会将这些参考装配安装到C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360\
首先,您可以尝试使用Portable Class Library。我听到过关于此事的混合报道。
我可能会这样做的方法是使用一些手动的MSBuild技巧。 Visual Studio项目文件是 MSBuild文件(XML)。您可以在文本编辑器中打开它并使用它。您会注意到XNA项目导入以下文件:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.targets" />
因此,您可以尝试将该导入添加到项目文件中(可能在适当的位置添加其他一些XNA配置,如<XnaPlatform>
)。 可能可以解决问题。
如果没有,您实际上可以查看这些文件(它们是C:\Program Files (x86)\MSBuild\Microsoft\XNA Game Studio\v4.0
)并尝试找出它们用于设置框架程序集路径的内容。我对MSBuild的了解不够明确。
否则,你可以蛮力强迫它。您可以通过将其添加到<PropertyGroup>
来关闭核心框架的内置引用:
<NoStdLib>true</NoStdLib>
然后手动设置每个引用的路径。所以你会改变这个:
<Reference Include="mscorlib" />
对此:
<Reference Include="mscorlib">
<HintPath>C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360\mscorlib.dll</HintPath>
</Reference>
等等所有其他参考文献。我以前在最后一种方法上取得了成功,做了类似的事情(手动更改目标框架)。