Deployment ASP.NET5中的配置文件转换

Deployment ASP.NET5中的配置文件转换,deployment,asp.net-core,Deployment,Asp.net Core,我们正在使用新的ASP.NET5平台构建一个web应用程序。我正在配置构建和部署自动化工具,希望能够在部署期间更改应用程序设置(如更改web服务url)。在ASP.NET5中,我们不再有web.config文件,只有新的json配置文件。ASP.NET 5中是否有类似于ASP.NET早期版本中的web.config转换的机制?您不需要ASP.NET 5中的配置转换,因为它对链接配置源具有现成的支持。例如,以: 我们添加两个配置源并构建它们的配置。如果我请求一个配置键,它将通过从上到下查看源代码来

我们正在使用新的ASP.NET5平台构建一个web应用程序。我正在配置构建和部署自动化工具,希望能够在部署期间更改应用程序设置(如更改web服务url)。在ASP.NET5中,我们不再有web.config文件,只有新的json配置文件。ASP.NET 5中是否有类似于ASP.NET早期版本中的web.config转换的机制?

您不需要ASP.NET 5中的配置转换,因为它对链接配置源具有现成的支持。例如,以:

我们添加两个配置源并构建它们的配置。如果我请求一个配置键,它将通过从上到下查看源代码来尝试获取该键的值。在上面的例子中,我可以在开发过程中使用一个文件,并且可以通过从环境变量提供适当的配置来验证该文件


查看了解更多信息。

如@tugberk所示,您可以使用环境变量,这是处理这种情况的更好方法。如果您在开发环境中运行,并且希望存储密码或连接字符串,那么还可以使用用户机密添加它们。毕竟,您仍然可以像这样使用特定于环境的配置文件(这是一个ASP.NET 5 Beta 5示例):


我知道web.configs实际上不受支持,但它们仍然在IIS下的ASP.Net中使用

我希望应用转换,也希望通过配置控制环境变量,如下所示:

<aspNetCore>
  <environmentVariables xdt:Transform="Replace">
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
  </environmentVariables>
</aspNetCore>
在发布AspNet调用上方添加以下行:

$xdtFiles = Get-ChildItem $packOutput | Where-Object {$_.Name -match "^web\..*\.config$"};
$webConfig = $packOutput + "web.config";
foreach($xdtFile in $xdtFiles) {

    XmlDocTransform -xml $webConfig -xdt "$packOutput$xdtFile"
}

谢谢我已经在看ConfigurationBuilder了,但是你关于相反顺序的观点澄清了一切。我很恼火,他们添加了这些必需的ASPNETCORE_环境变量,却没有任何简单的方法在发布配置文件的基础上控制它们!看起来XmlDocTransform方法中的最后一行是错误的。它需要是$xmldoc.Save($xml);工作。除此之外,这是一个非常方便的脚本,很好的一个@Svein Fidjestøl Svein,这就是我想要保存文件的方式。文件名为file.environment.config。我们使用octopusdeploy部署文件,作为部署过程的一部分,我们将正确的配置放在适当的位置。我喜欢你的改变作为其他人的替代方案,他们不想这样做,但这是故意的
<aspNetCore>
  <environmentVariables xdt:Transform="Replace">
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
  </environmentVariables>
</aspNetCore>
function XmlDocTransform($xml, $xdt)
{
    if (!$xml -or !(Test-Path -path $xml -PathType Leaf)) {
        throw "File not found. $xml";
    }
    if (!$xdt -or !(Test-Path -path $xdt -PathType Leaf)) {
        throw "File not found. $xdt";
    }

    "Transforming $xml using $xdt";

    $scriptPath = (Get-Variable MyInvocation -Scope 1).Value.InvocationName | split-path -parent
    #C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll

    Add-Type -LiteralPath "${Env:ProgramFiles(x86)}\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.XmlTransform.dll"

    $xmldoc = New-Object Microsoft.Web.XmlTransform.XmlTransformableDocument;
    $xmldoc.PreserveWhitespace = $true
    $xmldoc.Load($xml);

    $transf = New-Object Microsoft.Web.XmlTransform.XmlTransformation($xdt);
    if ($transf.Apply($xmldoc) -eq $false)
    {
        throw "Transformation failed."
    }
    $xmldoc.Save($xml);
}
$xdtFiles = Get-ChildItem $packOutput | Where-Object {$_.Name -match "^web\..*\.config$"};
$webConfig = $packOutput + "web.config";
foreach($xdtFile in $xdtFiles) {

    XmlDocTransform -xml $webConfig -xdt "$packOutput$xdtFile"
}