web-dev-qa-db-ja.com

発行ファイルにaspnetcore_environmentを設定する方法は?

ASP.NET Coreアプリケーション(Web Api)があります。ドキュメントでは 複数の環境で動作する を説明していますが、Webサイトを公開するときにaspnetcore_environmentを設定する方法を説明できませんでした。

3つの環境DevelopmentStagingおよびProductionがある場合、

  1. 従来のASP.NET Webアプリケーションでは、3つのビルド構成を作成するために使用していました。 DevelopmentStaging、およびProduction(下図のように)。次に、3つの.pubxmlファイル(構成ごとに1つ)。 ASP.NET Coreアプリケーションにも同じアプローチを使用する必要がありますか?

  2. aspnetcore_environmentファイルに.pubxmlを設定するにはどうすればよいですか?

  3. 質問1で指定されたアプローチが廃止された場合、代替アプローチは何ですか? (私はCIにJenkinsを使用しています)

enter image description here

アップデート1

ASPNETCORE_ENVIRONMENTを設定する必要があることは理解していますが、これをどこで設定するのか理解できませんか?開発中にlaunchSettings.jsonのプロファイルでこれを設定できますが、ステージングまたはプロダクションに公開するときにこれをどのように設定すればよいのでしょうか?ターゲットサーバー自体に環境変数を設定しますか?

enter image description here

更新2
環境変数を設定するさまざまな方法を説明する記事 here を見つけました。これは私の質問に部分的に答えました。ただし、アプリケーションを公開すると、公開プロセスはappsettings.{env.EnvironmentName}.jsonの公開中に環境変数を尊重しません。
別の post を質問用に作成しました

27
LP13

IISでアプリケーションをホストする場合、web.configで環境変数を設定できます。

https://docs.Microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module

パブリッシュ時に生成するには、web.configをプロジェクトのルートに追加します。「dotnet publish」は、パブリッシュフォルダーで生成されるファイルのベースとしてこのファイルを使用します。その後、展開システムの値を変更できます。

<?xml version="1.0" encoding="utf-8" ?>
<!-- Used to overwrite settings web.config generated by "dotnet publish", Only used when hosting under IIS -->
<configuration>
 <system.webServer>
   <aspNetCore stdoutLogEnabled="true">
     <environmentVariables>
       <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
     </environmentVariables>
   </aspNetCore>
 </system.webServer>  
</configuration>
17

以下を使用して、目的のASPNETCORE_ENVIRONMENTを引数としてdotnet publishコマンドに渡すことができます。

/p:EnvironmentName=Staging

例えばdotnet publish /p:Configuration=Release /p:EnvironmentName=Staging

これにより、プロジェクトに指定された正しい環境でweb.configが生成されます。

    <environmentVariables>
      <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Staging" />
    </environmentVariables>
15
Sheldon Nunes

同じ要件があり、次の解決策を思いつきました。これは、自動展開でうまく機能し、構成の変更が少なくて済みます。

1。プロジェクトファイル(.CsProj)ファイルの変更

MSBuildはEnvironmentNameプロパティをサポートしています。これは、展開する環境に応じて適切な環境変数を設定するのに役立ちます。環境名は、発行段階でweb.configに追加されます。

プロジェクトファイル(* .csProj)を開き、次のXMLを追加するだけです。

    <!-- Custom Property Group added to add the Environment name during publish
  The EnvironmentName property is used during the publish for the Environment variable in web.config
  -->
  <PropertyGroup Condition=" '$(Configuration)' == '' Or '$(Configuration)' == 'Debug'">
    <EnvironmentName>Development</EnvironmentName>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' != '' AND '$(Configuration)' != 'Debug' ">
    <EnvironmentName>'$(Configuration)'</EnvironmentName>
  </PropertyGroup>

上記のコードは、環境名を空の場合はDevelopmentまたはDebug構成として追加します。その他の構成の場合、選択された構成から環境名が選択されます。これにより、ASPNETCORE_ENVIRONMENT環境が目的の構成で追加されます。 CsProjファイルを更新することにより、必要に応じて環境名のロジックを変更できます。詳細 ここ

2。パブリッシュプロファイルにEnvironmentNameプロパティを追加します。

<EnvironmentName>プロパティを発行プロファイルに追加することもできます。 Properties/PublishProfiles/{profilename.pubxml}にある公開プロファイルファイルを開きます。これにより、プロジェクトの公開時にweb.configで環境名が設定されます。詳細 こちら

<PropertyGroup>
  <EnvironmentName>Development</EnvironmentName>
</PropertyGroup>

enter image description here

上の図に示すように、環境を各構成に追加し、EnvironmentNameプロパティの名前を各* .pubxmlファイルで変更できます。

3。 dotnet publishを使用したコマンドラインオプション

さらに、プロパティEnvironmentNameをコマンドラインオプションとしてdotnet publishコマンドに渡すことができます。次のコマンドは、web.configファイルにDevelopmentとして環境変数を含めます。

dotnet publish -c Debug -r win-x64 /p:EnvironmentName=Development

6
Abhinav Galodha

2つ以上のプロファイルを設定するには、追加のプロファイルを作成する必要があります。 リンクされた記事に記載 で、launchSettings.jsonには配列が含まれます。

"profiles": {
  "IIS Express": {
    "commandName": "IISExpress",
    "launchBrowser": true,
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Development"
    }
  },
  "IIS Express (Staging)": {
    "commandName": "IISExpress",
    "launchBrowser": true,
    "environmentVariables": {
      "ASPNETCORE_ENVIRONMENT": "Staging"
    }
  }
}

環境変数を読み取るには、 起動時に指定するand追加メソッドAddEnvironmentVariablesを呼び出す必要があります。変数へのアクションを実行します。

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            // general properties
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            // specify the environment-based properties
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            // do not forget to add environment variables to your config!
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }
}
1
VMAtm

Visual Studio IDEで設定する簡単な方法。

プロジェクト>プロパティ>デバッグ>環境変数

enter image description here

代わりにマシンレベルの環境変数をアプリケーションのスコープに使用しないでください。他のアプリケーションが同じことを行う可能性があり、変更すると他のアプリケーションに影響する可能性があります。

0

パブリッシュプロファイルではできないと思います。環境変数を設定する必要があります。 ASPNETCORE_ENVIRONMENT =ステージング。 AzureのaspnetコアWebアプリでも同様のことをしなければなりませんでした。開発、ステージング、およびプロダクションが必要でした。私がやった方法は、まさにenv変数でした。

0
regnauld