2

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

1 回答 1

4

您遇到的问题是您的项目之一是针对 Windows 版本的 .NET Framework ( mscorlib, System),而您的项目之一是针对 Xbox 360 版本的框架。而且,基本上,您不能将针对不同核心框架的程序集链接在一起。

我猜您的 F# 项目针对的是 Windows 版本的程序集。您需要做的是让您的 F# 项目以 Xbox 360 参考程序集为目标。

(请注意,我自己从来没有这样做过——所以我的回答只是列出你可以尝试的事情。)

供您参考,这些参考程序集默认安装到C:\Program Files (x86)\Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360\

首先,您可以尝试使用可移植类库。我听到了关于这方面的混合报道。

我可能会这样做的方式是使用一些手动 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>

对于所有其他参考资料,依此类推。我以前用最后一种方法取得了成功,用于做类似的事情(手动更改目标框架)。

于 2012-10-21T05:17:04.307 回答