我正在尝试在F#wep api项目中托管一个openid连接身份服务器,我正在使用F# MVC templates和identity 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隐藏构造函数?