web-dev-qa-db-ja.com

Asp.NET Coreでweb.config変換を設定する

Asp.netコアでのweb.config変換の問題に遭遇しました。

2つのファイルがあります:base web.configとweb.prod-zone-a.config。私の目的は、プロジェクトを公開するときにweb.prod-zone-a.config内で変換を使用することです。 .csprojに次の「prod-zone-a」構成設定があります。

  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'prod-zone-a|AnyCPU' ">
    <IntermediateOutputPath>obj\Debug\netcoreapp1.1</IntermediateOutputPath>
    <DebugSymbols>true</DebugSymbols>
    <Optimize>false</Optimize>
    <DefineConstants>TRACE;DEBUG;NETCOREAPP1_1</DefineConstants>
    <Configuration>prod-zone-a</Configuration>
  </PropertyGroup>

web.prod-zone-a.configは次のようになります。

<system.webServer>
    <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore>
        <environmentVariables xdt:Transform="Replace">
            <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="prod-zone-a" />
        </environmentVariables>
    </aspNetCore>
</system.webServer>

2つのコマンドでパブリッシュを実行しようとしました。

dotnet msbuild /t:Publish /p:OutputPath=c:\delivery /p:Configuration=prod-zone-a

そして

dotnet publish --configuration prod-zone-a --output c:\delivery

ただし、出力のweb.configには変換は適用されず、デフォルト値のみが適用されます。構成やコマンドの実行で何かを見逃していませんか?

9
user1820686

Xdt-transformationsについては、十分に文書化された github上のツール があります。また、コマンドに依存しません。両方のdotnet publishおよびdotnet msbuild 正常に動作します

7
user1820686

Dotnet cliの最新バージョン(2.1.400以降)では、このmsbuildプロパティ$(EnvironmentName)を設定するだけで、発行ツールがASPNETCORE_ENVIRONMENT environmentVariableを指定された環境名でweb.configに追加します。

また、XDTのサポートは2.2.100-preview1以降で利用可能です。

サンプル: https://github.com/vijayrkn/webconfigtransform/blob/master/README.md

4
vijayrkn

これは私のために働きました:

  1. 追加 web.release.configファイルをプロジェクトルートに追加します。
  2. Visual Studio 2017で、Web配置を使用して発行します(リリースに設定されていることを確認してください)。設定は自動的に取得されます。

変換の例:

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">
    <system.webServer>
      <aspNetCore>
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="PRODUCTION" xdt:Locator="Match(name)" xdt:Transform="SetAttributes" />
        </environmentVariables>
      </aspNetCore>
    </system.webServer>
</configuration>
2
Sha

これは、SDKバージョン2.2のdotnet publishでサポートされ、さまざまなオプションが用意されています。

https://docs.Microsoft.com/en-us/aspnet/core/Host-and-deploy/iis/transform-webconfig?view=aspnetcore-2.2

質問の例では、次のように公開されたときに機能すると思います

dotnet publish --configuration prod-zone-a

1
Daniel Edwards

上記のuser1820686の回答に続きます:

Githubページでは、MSBuild/csprojツールにこれを追加するために必要な手順の一部が欠落しています。

プロジェクトディレクトリでコマンドプロンプトを開き、dotnet add myProj.csproj package Microsoft.DotNet.Xdt.Tools --version 2.0.0を実行する必要があります

次に、csprojファイルを開いて追加する必要があります

<ItemGroup> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.Dotnet.Xdt.Tools" Version="2.0.0" /> ... other package references ... </ItemGroup>

1
squeakyD

はっきりしないかもしれません。私の場合、web.configはweb.Release.configファイルのすべての設定を上書きします。

私のために修正し、変換の参照を追加するだけですxmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform" to configurationファイル。

したがって、.configファイルが開始されます。

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">

しばらくすると、最善の解決策は dotnet-transform-xdtツール を使用することです。

1
Andrey R

これは、上記の1.と2.でうまくいきました。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.Microsoft.com/XML-Document-Transform">
  <location>
    <system.webServer>
      <httpErrors existingResponse="PassThrough"
                  xdt:Locator="Match(existingResponse)"
                  xdt:Transform="InsertIfMissing" />
    </system.webServer>
  </location>
</configuration>
1
Jon Fowler

IIS Web配置ASP.NET Core(2.1)Visual Studio 2017(VS2017)

まずこれを行います:(ref: https://github.com/nil4/dotnet-transform-xdt#-use-with-msbuildcsproj-tooling

  1. パッケージのインストール-_dotnet add package DotNet.Xdt --version 2.1.0_
  2. .csprojを変更-パッケージを追加-githubを参照
  3. .csprojを変更-変換コード(ApplyXdtConfigTransform)を最後に追加-githubを参照
  4. _web.DEV_Server.config_を右クリックして_DEV_Server.pubxml_変換ファイルを追加します
  5. 以下を_web.DEV_Server.config_に追加しました

<environmentVariable xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Development" xdt:Transform="SetAttributes" />

  1. _DEV_Server.pubxml_を変更して、次の設定値を変更します。

_<LastUsedBuildConfiguration>DEV_Server</LastUsedBuildConfiguration>_

  1. 接続と発行を検証

デプロイは他の構成ファイルをアップロードしますが、それを停止する方法がわかりません。

0
SamJackSon