5

我正在尝试在 F# wep api 项目中托管 openid connect 身份服务器,我正在使用F# MVC 模板和身份服务器的预发布包

当我创建任何一个基于 Katana 的 Web api 项目并随后添加 thinktecture.identityserver.v3 包时,编译失败

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver <- Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()

带有下划线的 CamelCasePropertyNamesContractResolver 错误“此类型没有可访问的对象构造函数”

那时我还没有更改任何代码 - 只是添加了包

我安装了 v1.13 的 vsix,这发生在 VS2013 和 2015 预览版中

我不确定这是否是模板、我添加的包或 f# 的问题?- 任何关于如何诊断或在哪里报告的指示将不胜感激

如果我手动添加对身份服务器程序集的引用,但在添加其他 nuget 包时无法复制,也会发生同样的情况 - 添加引用如何以某种方式掩盖 newtonsoft 类型的构造函数?

它似乎只影响该类型 - 如果我注释掉该行代码编译

startup.fs 的完整列表

namespace FSharpWeb1

open Owin
open Microsoft.Owin
open System
open System.Net.Http
open System.Web
open System.Web.Http
open System.Web.Http.Owin

[<Sealed>]
type Startup() =

    static member RegisterWebApi(config: HttpConfiguration) =
        // Configure routing
        config.MapHttpAttributeRoutes()

        // Configure serialization
        config.Formatters.XmlFormatter.UseXmlSerializer <- true
        config.Formatters.JsonFormatter.SerializerSettings.ContractResolver <- Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()

        // Additional Web API settings

    member __.Configuration(builder: IAppBuilder) =
        let config = new HttpConfiguration()
        Startup.RegisterWebApi(config)
        builder.UseWebApi(config) |> ignore

更新 1

只是为了好玩,我在 Xamarin 工作室重复了类似的练习,结果相同 - 一旦添加了对身份服务器的引用,它就会中断

我还尝试将 newtonsoft 的版本更新到最新的稳定版本,但这并没有帮助

更新 2

原来,身份服务器项目使用 ILMerge 来合并依赖项,例如 newtonsoft dll - 如果我在不使用 ILMerge 的情况下构建身份服务器核心 dll 并引用,那么问题就不会发生 - 这是 F# 问题还是 ILMerge 隐藏构造函数?

4

0 回答 0