我正在尝试在 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 隐藏构造函数?