我刚刚遇到了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没有转换 - 只是默认值。 我是否会错过配置或命令执行中的某些内容?
答案 0 :(得分:7)
有一个记录良好的tool on github用于xdt转换。
它也不依赖于命令,dotnet publish
和dotnet msbuild
都可以正常工作
答案 1 :(得分:3)
使用最新版本的dotnet cli(2.1.400或更高版本),您只需设置此msbuild属性$(EnvironmentName),然后发布工具将负责为ASP.NETCORE_ENVIRONMENT环境变量添加到具有指定环境名称的web.config。
此外,从2.2.100-preview1开始可以使用XDT。
示例:https://github.com/vijayrkn/webconfigtransform/blob/master/README.md
答案 2 :(得分:1)
可能我不清楚问题。对于我的情况,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
答案 3 :(得分:1)
继用户1820686的答案之后:
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>
答案 4 :(得分:1)
SD版本2.2中的dotnet publish
现在支持此功能,其中提供了很多选项。
我认为在该问题的示例中,当发布为
dotnet publish --configuration prod-zone-a
答案 5 :(得分:0)
Visual Studio 2017(VS2017)中的IIS Web部署ASP.NET Core(2.1)
首先执行此操作:(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>
Deploy仍会上传其他配置文件,不确定如何停止。
答案 6 :(得分:0)
这对我有用:
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>
答案 7 :(得分:0)
这对我来说适用于上面的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>