在普通的Visual Studio 2012项目中定位XNA框架

时间:2012-10-20 23:13:41

标签: visual-studio f# xna visual-studio-2012 xna-4.0

我有一个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=***".

1 个答案:

答案 0 :(得分:4)

您遇到的问题是,您的某个项目是针对.NET Framework的Windows版本(mscorlibSystem),而您的一个项目是针对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>

等等所有其他参考文献。我以前在最后一种方法上取得了成功,做了类似的事情(手动更改目标框架)。