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には変換は適用されず、デフォルト値のみが適用されます。構成やコマンドの実行で何かを見逃していませんか?
Xdt-transformationsについては、十分に文書化された github上のツール があります。また、コマンドに依存しません。両方のdotnet publish
およびdotnet msbuild
正常に動作します
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
これは私のために働きました:
web.release.config
ファイルをプロジェクトルートに追加します。変換の例:
<?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>
これは、SDKバージョン2.2のdotnet publish
でサポートされ、さまざまなオプションが用意されています。
質問の例では、次のように公開されたときに機能すると思います
dotnet publish --configuration prod-zone-a
上記の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>
はっきりしないかもしれません。私の場合、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.と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>
IIS Web配置ASP.NET Core(2.1)Visual Studio 2017(VS2017)
まずこれを行います:(ref: https://github.com/nil4/dotnet-transform-xdt#-use-with-msbuildcsproj-tooling )
dotnet add package DotNet.Xdt --version 2.1.0
_ApplyXdtConfigTransform
)を最後に追加-githubを参照web.DEV_Server.config
_を右クリックして_DEV_Server.pubxml
_変換ファイルを追加しますweb.DEV_Server.config
_に追加しました<environmentVariable xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Development" xdt:Transform="SetAttributes" />
DEV_Server.pubxml
_を変更して、次の設定値を変更します。_<LastUsedBuildConfiguration>DEV_Server</LastUsedBuildConfiguration>
_
デプロイは他の構成ファイルをアップロードしますが、それを停止する方法がわかりません。