在 Asp.NET 核心中设置 web.config 转换
Set web.config transform in Asp.NET Core
我刚刚遇到 asp.net 核心中的 web.config 转换问题。
有两个文件: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>
我尝试通过两个命令运行发布:
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 转换有详细的文档记录 tool on github。
它也不依赖于命令,dotnet publish
和 dotnet msbuild
都可以正常工作
可能是我没问清楚。对于我的案例 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 tool
继上面 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>
使用最新版本的 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
IIS Web 部署 ASP.NET Visual Studio 2017 (VS2017) 中的核心 (2.1)
首先这样做:(ref:https://github.com/nil4/dotnet-transform-xdt#-use-with-msbuildcsproj-tooling)
- 安装包 -
dotnet add package DotNet.Xdt --version 2.1.0
- 修改.csproj - 添加包 - 参考github
- 修改.csproj - 在末尾添加转换代码(
ApplyXdtConfigTransform
) - 参考github
- 通过右键单击
DEV_Server.pubxml
添加 web.DEV_Server.config
转换文件
- 在
web.DEV_Server.config
中添加了以下内容
<environmentVariable xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Development" xdt:Transform="SetAttributes" />
- 修改
DEV_Server.pubxml
修改如下设置值
<LastUsedBuildConfiguration>DEV_Server</LastUsedBuildConfiguration>
- 验证连接并发布
部署仍在上传其他配置文件,不知道如何停止。
这对我有用:
- 将
web.release.config
文件添加到项目根目录。
- 在 Visual Studio 2017 年,使用 Web Deploy 发布(确保它设置为 Release)。设置将被自动拾取。
示例转换:
<?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>
更新:如果您想在发布时删除 web.config.release
文件和其他文件,只需编辑您的 .csproj 文件并添加如下内容:
<ItemGroup>
<Content Remove="appsettings.Development.json" />
<Content Remove="web.release.config" />
</ItemGroup>
<ItemGroup>
<None Include="appsettings.Development.json" />
<None Include="web.release.config" />
</ItemGroup>
SDK 2.2 版 dotnet publish
现在支持此功能,并提供了一大堆选项。
我认为在问题的示例中,它会在发布为
时起作用
dotnet publish --configuration prod-zone-a
上面的 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>
我刚刚遇到 asp.net 核心中的 web.config 转换问题。
有两个文件: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>
我尝试通过两个命令运行发布:
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 转换有详细的文档记录 tool on github。
它也不依赖于命令,dotnet publish
和 dotnet msbuild
都可以正常工作
可能是我没问清楚。对于我的案例 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 tool
继上面 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>
使用最新版本的 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
IIS Web 部署 ASP.NET Visual Studio 2017 (VS2017) 中的核心 (2.1)
首先这样做:(ref:https://github.com/nil4/dotnet-transform-xdt#-use-with-msbuildcsproj-tooling)
- 安装包 -
dotnet add package DotNet.Xdt --version 2.1.0
- 修改.csproj - 添加包 - 参考github
- 修改.csproj - 在末尾添加转换代码(
ApplyXdtConfigTransform
) - 参考github - 通过右键单击
DEV_Server.pubxml
添加 - 在
web.DEV_Server.config
中添加了以下内容
web.DEV_Server.config
转换文件
<environmentVariable xdt:Locator="Match(name)" name="ASPNETCORE_ENVIRONMENT" value="Development" xdt:Transform="SetAttributes" />
- 修改
DEV_Server.pubxml
修改如下设置值
<LastUsedBuildConfiguration>DEV_Server</LastUsedBuildConfiguration>
- 验证连接并发布
部署仍在上传其他配置文件,不知道如何停止。
这对我有用:
- 将
web.release.config
文件添加到项目根目录。 - 在 Visual Studio 2017 年,使用 Web Deploy 发布(确保它设置为 Release)。设置将被自动拾取。
示例转换:
<?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>
更新:如果您想在发布时删除 web.config.release
文件和其他文件,只需编辑您的 .csproj 文件并添加如下内容:
<ItemGroup>
<Content Remove="appsettings.Development.json" />
<Content Remove="web.release.config" />
</ItemGroup>
<ItemGroup>
<None Include="appsettings.Development.json" />
<None Include="web.release.config" />
</ItemGroup>
SDK 2.2 版 dotnet publish
现在支持此功能,并提供了一大堆选项。
我认为在问题的示例中,它会在发布为
时起作用dotnet publish --configuration prod-zone-a
上面的 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>