web-dev-qa-db-ja.com

スタンドアロンexe内で実行していない場合は、exePathを指定する必要があります

Webアプリケーションを使用している場合、以下のコード行

Configuration objConfig = 
    ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None);

クラスライブラリでこのエラーが発生しています:

「スタンドアロンexe内で実行していない場合は、exePathを指定する必要があります。」

以前はコンソールアプリケーションが使用されていて、コードはapp.configにアクセスできました。クラスライブラリでSystem.Web.Configurationを使用してみましたが、[参照の追加]の.Netタブにdllがありませんでした。

親切に助けてください:)

31
Pramita Gupta

Webコンテキストで別の構成マネージャーを使用する必要があります。次のコードブロックは、これに対処する方法の例を示しています。

System.Configuration.Configuration configuration = null;         
if (System.Web.HttpContext.Current != null)
{
   configuration =
       System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
}
else
{
  configuration =
      ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
46
shane

私はあなたが何をしているのかわかりません。しかし、一見すると、WinFormsアプリケーション用に作成されたコードをWeb環境で使用しようとしているように見えます。 Webアプリには必要な権限がないため、これはほぼ確実に機能しません。
Web環境でこれを行う方法を調べてみてください(構成ファイルを扱っているようなので、WEB.CONFIGで検索してみてください)。

2
qwerty13579

@shaneからの回答を使用しようとしましたが、Hangfireを使用して同じ例外が発生しました。このコードは私にとってもうまくいきました:

System.Configuration.Configuration configFile = null;
if (System.Web.HttpContext.Current != null)
{
    configFile =
        System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
}
else
{
    System.Configuration.ExeConfigurationFileMap map = new ExeConfigurationFileMap { ExeConfigFilename = $"{System.AppDomain.CurrentDomain.BaseDirectory}Web.Config" };
    configFile = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
}

Web.configを編集するとアプリケーションプールが再起動することに注意してください

1
Ogglas