.Net Core APIを作成し、.Netフレームワークアプリケーションを参照しました。参照されるアプリケーションはデータベースに接続し、その接続文字列はweb.configファイルに保存されます。
string CONNSTR =ConfigurationManager.ConnectionStrings["SHOPPINGCNN"].ConnectionString;
.Net Coreアプリケーションは、web.configファイルの代わりにappsettings.jsonを使用します。 APIを実行して、参照されたアプリケーションリソースを使用しようとすると、.net Coreアプリにweb.configファイルが存在しないため、上記のコードがトリガーされ、nullを返します。この問題を解決する最善の解決策は何ですか
.Net Coreアプリケーションは自己ホスト型であり、ほぼすべてのプラットフォームで実行できるため、ISSではホストされなくなりました。 .Net Coreアプリケーションの設定は、Json
形式(appsettings.json
)デフォルトでは、.Net Frameworkアプリケーションの構成はweb.config
ファイルはXML
形式です。 .Net Coreアプリケーションの詳細については、 ASP.NET Coreの構成 を参照してください。私の場合、.Net Core 2.0アセンブリから.Net Frameworkアセンブリのデータレイヤーにアクセスしようとしていました。これを実現するために、 System.Configuration.ConfigurationManager パッケージをインストールする必要はありません。 .Net Coreアプリケーション。ただし、追加する必要があるのはapp.config
を.Net Coreアセンブリに追加し、接続文字列を追加します。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="SHOPPINGCNN" connectionString="server=your server name;integrated security=true;database=your database name" />
</connectionStrings>
</configuration>
すべてが正常に機能します。 .Net Frameworkアプリケーションで使用したものと同じ接続文字列名(私の場合はSHOPPINGCNN
)を使用していることを確認してください。そうしないと、目的の結果が得られません。私は自分のプロジェクトでこれを行い、100%動作します
.netコアでは、ConfigurationBuilder
を使用してappsettings.jsonファイルを読み取ることができます。
以下のように実装できます。
appsettings.jsonサンプル
{
"option1": "value1_from_json",
"option2": 2,
"ConnectionStrings": {
"YourConnectionString": "............."
}
}
C#コードサンプル
static class YourClass
{
public static IConfigurationRoot Configuration;
public static string GetConnectionString()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
var connectionString = Configuration["ConnectionStrings:YourConnectionString"];
}
}
.NET Coreアプリの場合、最良の方法は Configuration API を使用することです。これは非常に柔軟な方法であり、プロバイダーパターンのおかげで、最も一般的なappsettings.json
ファイル(ちなみにJSONファイルであり、ランダムな名前を付けることができます):
- ファイル形式(INI、JSON、およびXML)
- コマンドライン引数
- 環境変数
- インメモリ.NETオブジェクト
- 暗号化されたユーザーストアAzure Key Vault
- インストールまたは作成するカスタムプロバイダー
ConfigurationManager
について。最初、.NET Coreはこのクラスを忘れることを余儀なくされました。実装もサポートもされていなかったため、新しい構成APIを提供することで完全に置き換えるという考えでした。
さらに、ASP.NET CoreアプリがIIS=(IISは主にリバースプロキシとして機能するようになりました)を介してホストされなくなったため、web.config
はもはや有用ではありません(IIS構成)に固有のパラメーターを定義する必要がある場合を除き、まれな場合を除きます。
ただし、.NET Standard 2.0が提供された後、この System.Configuration.ConfigurationManager nugetパッケージが利用可能になり、ConfigurationManager
クラスが返されます。新しい.NET Core 2.0に実装された新しい compatibility shim により可能になりました。
あなたのケースに関しては、十分な情報ではないため、「null」を持っている理由を言うのは困難です:
あなたがそれを見逃した場合-そして@Zuhairは答えを投稿したくないようである-解決策のコピーペーストはここにあります(コメントでしかなかったので最初はこれを見逃しました):
私は解決策を見つけました。 Web.configの名前をapp.configに変更し、次を使用して接続文字列を取得できました。
System.Configuration.ConfigurationManager.ConnectionStrings ["SHOPPINGCNN"]。ConnectionString
App.configファイルは次のようになります。
<?xml version="1.0"> encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="SHOPPINGCNN" connectionString="server=.\SQLEXPRESS;integrated security=true;database=xxxxx" />
</connectionStrings>
</configuration>
このNuGetパッケージもインストールする必要があります。
System.Configuration.ConfigurationManager
私の場合、connectionString 'app.config'を含むweb.configの名前を変更するだけで機能しました。
これはおそらく良い長期的なソリューションではないことを理解していますが、レガシープロジェクトが混在している場合や、.net Coreの学習を開始するためにドアを踏み入れるのは非常に便利です。