8

C# Web プロジェクトから使用している F# ライブラリ プロジェクトがあります。F# プロジェクトで Entity Framework Type Provider を使用し、接続文字列を取得したいと考えていますが、これを機能させるのWeb.configに問題があります。

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", Pluralize=true>

設計時にはApp.config、一致する名前を持つ接続文字列を含むファイルを F# ライブラリ プロジェクトに含める必要があります。

実行時に C# Web プロジェクトから F# コードを呼び出すと、「App.config」ファイルが見つからないというエラーが表示されます。ConfigurationManager.ConnectionStrings実行時に、現在アクティブな構成ファイル (Web アプリの場合) から接続文字列をロードするために使用するだけだと思っていたので、これには驚きましたWeb.config。しかし、そうではないようです。

ConfigFileパラメータを追加してみました:

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", ConfigFile="Web.config", Pluralize=true>

しかし、これにより、設計時に見つからないという不平を言うだけでしWeb.configた。

次にApp.config、F# ライブラリ プロジェクトのファイルの名前を に変更したところWeb.config、問題が解決したようです。しかし、私はこの解決策に不安を感じています。これは本当に意図された動作ですか?ライブラリ プロジェクトに web.config ファイルが必要ですか? コマンドライン実行可能ファイルから同じライブラリを使用したい場合、その環境で構成ファイルが呼び出される場合はどうすればよいAssemblyName.exe.configですか?

さまざまなコンテキストでさまざまな名前を持つことができる構成ファイルの名前をハードコーディングすることを強制することは、非常に脆弱であり、設計が不十分です。何か足りないと教えてください。

4

1 に答える 1

3

あなたが遭遇した問題は実に残念なことのように思えます。あなたが何かを見逃しているかどうかはわかりません。ただし、SqlEntityConnection のドキュメントには、「接続文字列が実行時に決定されるときに connectionString パラメータを使用できる」オーバーロードがFooDb必要であると記載されています。GetDataContextおそらく、それで十分な回避策が得られるでしょう (つまり、ConfigurationManager.ConnectionStrings自分から接続文字列を渡します)。

于 2012-12-22T22:29:27.837 に答える