F# wep api プロジェクトで openid connect ID サーバーをホストしようとしています。F# MVC テンプレートとID サーバーのプレリリース パッケージを使用しています。
いずれかの Katana ベースの Web API プロジェクトを作成し、その後 thinktecture.identityserver.v3 パッケージを追加すると、次の行でコンパイルが失敗します
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver <- Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver()
CamelCasePropertyNamesContractResolver に下線が引かれた「この型にはアクセス可能なオブジェクト コンストラクターがありません」というエラーが表示される
その時点で、私はコードを変更していません-パッケージを追加しただけです
vsix の v1.13 がインストールされていますが、これは VS2013 と 2015 プレビューの両方で発生します。
これがテンプレートの問題なのか、追加したパッケージの問題なのか、一般的な f# の問題なのかわかりません。- 診断方法や報告先についての指針をいただければ幸いです
ID サーバー アセンブリへの参照を手動で追加した場合も同じことが起こりますが、他の nuget パッケージを追加するときに複製できませんでした。
そのタイプにのみ影響するようです-その行をコメントアウトすると、コードがコンパイルされます
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 スタジオで同様の演習を繰り返しましたが、同じ結果が得られました。ID サーバーへの参照が追加されるとすぐに壊れます。
また、newtonsoft のバージョンを最新の安定版に更新しようとしましたが、役に立ちませんでした
更新 2
アイデンティティ サーバー プロジェクトは ILMerge を使用して、newtonsoft dll などの依存関係をマージしていることが判明しました - ILMerge を使用せずにアイデンティティ サーバー コア DLL をビルドし、問題が発生しないことを参照すると、これは F# の問題であるか、ILMerge 隠蔽コンストラクターであるか?