1

これら3つのプロジェクトで解決策があります。

  • Web API
  • ダル
  • ドメイン

DAL プロジェクトは、Web 参照を持つクラス ライブラリです。したがって、そのプロジェクトの app.config には次のようなセクションがあります。

<applicationSettings>
    <Company.Project.Domain.Properties.Settings>
      <setting name="Company_Project_Domain_Some_Service" serializeAs="String">
        <value>http://my.server.local:8888/somePath/service.asmx</value>
      </setting>
    </Company.Project.Domain.Properties.Settings>
  </applicationSettings>

遅いチーターがインストールされており、この DAL プロジェクトで構成変換を使用しています。たとえば、上記の Web 参照を次のように本番 Web 参照を指すように変換する app.production.config があります。

<applicationSettings>
    <Company.Project.Domain.Properties.Settings>
      <setting name="Company_Project_Domain_Some_Service" serializeAs="String">
        <value>http://my.PRODUCTIONSERVER.local:8888/somePath/service.asmx</value>
      </setting>
    </Company.Project.Domain.Properties.Settings>
</applicationSettings>

API を公開すると、web.config には上記のアプリケーション設定が含まれていません。Reflector を使用して DAL.dll にドリルダウンし、service.asmx パスを確認できます。ただし、変換は行わないため、公開されたアプリは my.PRODUCTIONSERVER.local:8888 を使用しません。

したがって、2つの質問。

  1. パブリッシングで、参照されているクラス ライブラリで xdt 変換が使用されないのはなぜですか?
  2. アプリケーション設定ブロックが Web API プロジェクトの web.config にある必要がある場合、DAL から Web 参照を削除して Web API プロジェクトに追加する必要があるということですか? ...または、参照をそのままにして、関連する applicationSettings ブロックを web.config にコピーできますか?
4

1 に答える 1

0

まず、Web 参照をライブラリに追加することは、良い考えとは思えません。ライブラリは、再利用可能な自己完結型のコードであり、さまざまなプロジェクトで使用できるためです。そのロジックに基づいて、Web API 内の別のフォルダーではなく、DAL をプロジェクトに分離することを選択した理由を知りたいです。しかし、その議論は後回しにします。

最初の質問に答えるには、

パブリッシングで、参照されているクラス ライブラリで xdt 変換が使用されないのはなぜですか?

公開すると、公開元の Web アプリ内の構成のみが変換されます。アプリをどのように公開しているかはわかりませんが、コマンドラインを使用した場合は、おそらく次のようにするでしょう。

 msbuild /p:PublishOnBuild WebApi.csproj

MsBuild は、.csproj ファイルを使用してアプリをビルドおよび公開します。.csproj 内には、変換に必要な情報が含まれています。したがって、MsBuild は、参照されたライブラリから app.config を変換する必要があることを認識していません。これが、DAL からの構成が変換されずにコピーされた理由です。

2 番目の質問に進みます

アプリケーション設定ブロックが Web API プロジェクトの web.config にある必要がある場合、DAL から Web 参照を削除して Web API プロジェクトに追加する必要があるということですか? ...または、参照をそのままにして、関連する applicationSettings ブロックを web.config にコピーできますか?

ここにはいくつかのオプションがあります。

  1. 前述のように Web 参照を Web API プロジェクトに移動し、web.config で URI を制御します。つまり、DAL から Web API を参照する必要があります。
  2. アプリ設定ブロックを web.config に移動しますが、Web 参照は DAL に保持します。次に、実行時にサービスの URI を設定できます。ここに示されているように
  3. [理想] DAL を Web API にマージします。プロジェクト間で DAL を共有したくない場合を除き、DAL を別のプロジェクトに移動する理由がないため、これは理想的だと思います。実際、最初に移動したため、この問題に直面しているようです。したがって、そうする強い理由がない限り、これが最良の選択肢です。
于 2016-05-31T10:49:45.760 に答える