5

我有一组这样的 F# 记录类型:

type Course =
    { Id : int
      Title : string
      Instructor : string
      Duration : string
      StartDate : string
      IconUrl : string
      Url : string 
      LectureSections : LectureSection list }

and LectureSection =
    { Title : string
      Completed : bool
      Lectures : Lecture list }

and Lecture = 
    { Title : string
      VideoUrl : string }

在某个时候我打电话给

sprintf "%A" course

其中 course 是 Course 记录的一个实例

在常规的 .NET 项目中,这可以正常工作,但在 Windows Phone 7.1 / Silverlight 4 F# 项目中(我正在使用 Daniel Mohl 的模板),我收到此错误:

Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true.

问题似乎是列表。有谁知道解决这个问题的任何方法?

4

1 回答 1

2

这些模板应该带有一个自定义构建的 FSharp.Core.dll,它会禁用 Windows Phone 上不可用的功能。你确定你是针对这个 dll 而不是 Windows PC 编译的吗?

Xbox360 和 XNA 也有类似的问题。F# 团队向我发送了一个适用于 Xbox360 的 dll,以及一些关于用于构建 dll 的设置的简要说明。

这是我们用来编译 FSharp.Core 的属性组:

 <PropertyGroup Condition="'$(TargetFramework)'=='Xbox360\CompactFramework\3.7'">
   <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
   <TargetFrameworkProfile>Client</TargetFrameworkProfile>
   <XnaFrameworkVersion>v4.0</XnaFrameworkVersion>
   <XnaPlatform>Xbox 360</XnaPlatform>
   <XnaProfile>HiDef</XnaProfile>
   <XnaCrossPlatformGroupID>a8d70e6b-9a75-4aec-80f8-62cf373f7368</XnaCrossPlatformGroupID>
   <XnaOutputType>Game</XnaOutputType>
   <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
   <DefineConstants>$(DefineConstants);FX_NO_ARRAY_LONG_LENGTH;FX_NO_DEBUG_PROXIES;FX_NO_EXIT;FX_FSLIB_IOBSERVABLE;FX_NO_WEB_CLIENT;FX_NO_WEB_REQUESTS;FX_NO_CHAR_PARSE;FX_NO_DEFAULT_DEPENDENCY_TYPE;FX_SIMPLE_SECURITY_PERMISSIONS;FX_NO_TRUNCATE;FX_NO_CULTURE_INFO_ARGS;FX_NO_REFLECTION_MODULE_HANDLES;FX_NO_OPERATION_CANCELLED;FX_NO_TO_LOWER_INVARIANT;FX_NO_EXIT_CONTEXT_FLAGS;FX_NO_BASED_ARRAYS;FX_NO_DOUBLE_BIT_CONVERTER;FX_NO_BINARY_SERIALIZATION;FX_NO_ASCII_ENCODING;FX_NO_DEFAULT_ENCODING;FX_NO_FILE_OPTIONS;FX_NO_NONBLOCK_IO;FX_NO_COMMAND_LINE_ARGS;FX_NO_ENVIRONMENT;FX_NO_PROCESS_START;FX_NO_APP_DOMAINS;FX_NO_PROCESS_DIAGNOSTICS;FX_FSLIB_STRUCTURAL_EQUALITY;FX_FSLIB_LAZY;FX_FSLIB_TUPLE;FX_NO_REFLECTION_EMIT</DefineConstants>
   <Tailcalls>false</Tailcalls>
   <!-- It would be better to use MSBuild resolution here, but the TargetFrameworkIdentifier etc. aren't set up quite correctly as yet -->
   <OtherFlags>$(OtherFlags) --simpleresolution -r:"C:\Program Files\Microsoft XNA\XNA Game Studio\v4.0\References\Xbox360\mscorlib.dll"</OtherFlags>
 </PropertyGroup>

以及我们使用的新 .targets:

<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.targets" Condition="'$(TargetFramework)'=='Xbox360\CompactFramework\3.7'"/>

他们发给我的 dll 运行良好,我从来不必使用这些说明,但它们可能对想要为新平台构建 FSharp.Core.dll 的人有用。特别注意DefineConstants部分。

于 2012-05-08T18:56:46.033 回答