Ric*_*ard 5 f# thinktecture-ident-server identityserver3
我正在尝试在F#wep api项目中托管一个openid连接身份服务器,我正在使用F#MVC模板和身份服务器的预发布包
当我创建任何基于Katana的web api项目并随后添加thinktecture.identityserver.v3包时,编译在该行失败
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver <- Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
Run Code Online (Sandbox Code Playgroud)
带有错误"此类型没有可访问的对象构造函数",并带有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
Run Code Online (Sandbox Code Playgroud)
更新1
为了好玩,我在Xamarin工作室重复了类似的练习并获得了相同的结果 - 只要添加了参考标识服务器,它就会中断
我也尝试将newtonsoft的版本更新到最新的稳定版,但没有帮助
更新2
原来身份服务器项目使用ILMerge来合并依赖项,例如newtonsoft dll - 如果我构建身份服务器核心dll而不使用ILMerge并引用那么问题就不会发生 - 这是一个F#问题还是ILMerge隐藏构造函数?