添加对thinktecture.identityserver.3的引用导致此类型在现有代码中没有可访问的对象构造函数错误

时间:2015-01-14 10:28:17

标签: f# thinktecture-ident-server identityserver3

我正在尝试在F#wep api项目中托管一个openid连接身份服务器,我正在使用F# MVC templatesidentity server的预发布包

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

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

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

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

我安装了vsix的v1.13,这在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 - 如果我构建身份服务器核心dll而不使用ILMerge并引用那么问题就不会发生 - 所以这是一个F#问题或者ILMerge隐藏构造函数?

0 个答案:

没有答案