23

C# クラス ライブラリとスタートアップ プロジェクト (コンソール アプリ) があります。クラス ライブラリには、Web サービスへのサービス参照が含まれています。プロジェクトを実行しようとすると、スタートアップ プロジェクトがクラス ライブラリの app.config を読み取らず、サービス参照を無視しているため、InvalidOperationException が発生します。機能させるために、同じサービス参照をスタートアップ プロジェクトに追加する必要があります。これを回避する方法はありますか?スタートアップ プロジェクトにクラス ライブラリのサービス参照と app.config をコピーせずに、スタートアップ プロジェクトに認識させることはできますか?

クラス ライブラリから app.config へのリンクを追加しようとしましたが、うまくいきません。クラス ライブラリは、それを使用する人がそのサービス参照をスタートアップ プロジェクトに追加する必要がある場合、あまり移植性がありません。

4

5 に答える 5

15

何をしようとしているのか考えてみてください - 構築しているアセンブリが 2 つあります。

Library
ConsoleApp

これらのアセンブリには両方とも構成ファイルがあり、次のようになっていると思います。

Library
    app.config
ConsoleApp
    ConsoleApp.exe.config

実行すると、アセンブリからConsoleApp読み取ったり、アセンブリから認識したりする方法がありません。それが知っている、または気にする唯一の構成ファイルは. 構成ファイルを相互に参照させることができるようになりましたが、これはあなたがしようとしていることに対する適切な解決策ではありません。app.configLibraryConsoleApp.exe.config

アセンブリにはエントリ ポイントがないためLibrary、AppDomain に読み込まれることはありません。AppDomain にロードされることはないため、そのアプリケーション構成ファイルは使用されません。

あなたがすべきことは、プロジェクト参照Libraryを介して参照することです。ConsoleApp次に、関連するすべての構成データを からapp.configに移動しConsoleApp.exe.configます。これは、アプリケーションで使用される構成ファイルです。

これにより、Web サービスでメソッドを呼び出すために必要な 2 つのことが可能になります。

  1. LibrarySOAP メッセージを送受信できる コード。
  2. が機能するために必要な構成メタデータLibrary
于 2009-02-09T20:38:47.227 に答える
3

クラス ライブラリでサービス参照を使用して構成をコピーする代わりに、svcutil.exe を呼び出すビルド イベントを使用することもできます。これについて私が気に入っているのは、サービスが変更されたときに「更新サービス参照」を作成する必要がないことです。自動的に更新されます。

クラス ライブラリで、プロキシ コードのみを生成するビルド イベントを使用します。

svcutil.exe net.tcp://localhost:3315/MyService/mex /noConfig

アプリケーションで、構成を生成するビルド イベントを使用します。/mergeConfig オプションを使用して、既存の app.config にマージできます。

svcutil.exe net.tcp://localhost:3315/MyService/mex 
            /config:App.config /mergeConfig

サービスが実行されていない場合にビルド エラーを発生させたくない場合は、これをプロジェクト ファイルに追加すると、エラーの代わりに警告が表示されます。

<Target
    Name="PreBuildEvent"
    Condition="'$(PreBuildEvent)'!=''"
    DependsOnTargets="$(PreBuildEventDependsOn)">
  <Exec WorkingDirectory="$(OutDir)"
        Command="$(PreBuildEvent)"
        ContinueOnError="true" />
</Target>
于 2010-04-19T11:14:51.240 に答える
1

サービスを指す構成キーを、クラス ライブラリの構成ファイルからコンソール アプリの構成ファイルにコピーするだけです。

于 2009-02-09T19:40:44.073 に答える
1

app.config の関連部分を、クラス ライブラリの構成からコンソール アプリケーションの app.config にコピーできます。

または、これを本当に移植可能にしようとしている場合は、クラス ライブラリ内から特定のサービス参照のアドレスを参照する別の方法を考える必要があります。

于 2009-02-09T19:41:22.527 に答える
0

複数の構成ファイルを実行している場合は、さらに混乱すると思います。

ライブラリに構成可能なアイテムがある場合、ライブラリを適切に使用するには、その構成を構成ファイルに入れる必要があると完全に予想されます。

于 2009-02-09T19:40:54.917 に答える