【问题标题】:Configuring ASPNETCORE_ENVIRONMENT In TFS for .Net Core 2在 TFS 中为 .Net Core 2 配置 ASPNETCORE_ENVIRONMENT
【发布时间】:2018-09-15 07:57:33
【问题描述】:

我们现在遇到一个问题,我们无法调试我们的开发服务器环境:

现在,我花了数小时寻找如何设置 ASPNETCORE_ENVIRONMENT,但我只找到了两种(实用的)方法:

  1. 创建一个 web.[MYCONFIGURATION].config 文件并添加以下内容,其中 [MYCONFIGURATION] 类似于 Development 或 Release:

web.[MYCONFIGURATION].config:

<environmentVariables>
  <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
  1. 在已部署的服务器上设置 IIS 变量以启用 ASPCORE_ENVIRONMENT

以下是每个问题:

  1. 由于 .NET Core 使用 appsettings.json 文件进行配置(据我所知,web.config 是从中生成的),如果我们创建 web.config,我们的数据库连接字符串和其他设置等内容就会丢失我们自己。
  2. 我们在企业级的多应用程序环境中运行,结合了 .NET Core 和非 Core ASP.NET 应用程序(我无权访问),因此仅为我们的应用程序更改 IIS 的设置是不是一个选项。

需要注意的是,我们正在使用 TFS 的 Build/Release 发布到我们的开发服务器。我曾希望添加“开发”的 BuildConfiguration 变量也可以设置 ASPNETCORE_ENVIRONMENT,但不幸的是它没有。

我可以做些什么来只为我们的应用程序设置 ASPNETCORE_ENVIRONMENT 而不需要 web.config 或 IIS 设置?或者,如果目前不可能,鉴于我所描述的限制,我怎样才能使这两个选项之一起作用?

【问题讨论】:

  • 您是否在开发服务器上设置了环境变量?您可以通过系统属性添加它,在高级选项卡上,单击环境变量按钮。变量是 ASPNETCORE_ENVIRONMENT。
  • @Derek 正如我在问题中提到的那样,我无权访问开发服务器,即使我这样做了,我也无法在其上设置环境变量,因为它正在为多个其他 Web 应用程序提供服务多应用企业环境。
  • 构建配置是项目设置的集合,它决定了您的 IDE 将如何构建您的项目。它不会在您的开发服务器上设置 environmentVariable 。看来您的问题与 TFS 无关,您可以删除 TFS 标记。
  • @CeceDong-MSFT 有没有办法在不配置 IIS 的情况下设置环境变量?
  • @CeceDong-MSFT 我完全不同意这与 TFS 无关。整个问题都与如何使用 TFS 构建工具来配置目标环境有关,这也是我自己来看这个线程的确切原因。

标签: tfs configuration web-config asp.net-core-2.0


【解决方案1】:

我认为我没有正确跟随,在我看来你快到了。我们有类似的设置,这就是我的部署的样子。

本质上,您不会从 appsettings.json 创建 web.config。你告诉你的应用程序(在 IIS 后面的 Kestrel 上运行)使用哪个 appsettings.[Env].json,具体取决于 web.config 中设置的 ASPNETCORE_ENVIRONMENT 值。不太清楚你的意思

我们的数据库连接字符串和其他设置得到 如果我们自己创建 web.config 就会丢失

我所有的部署脚本都通过我们的构建服务器使用 PS 和 PS 远程处理(作为 TFS 用户,您应该熟悉这一点),所以简而言之,会发生这种情况:

// Where Env.Name is the runtime configuration - i.e. "Production"
$environmentVariable = [PSCustomObject]@{Name='ASPNETCORE_ENVIRONMENT'; Value=$using:Env.Name}

// This is how I add the actual value for ASPNETCORE_ENVIRONMENT in web.config
Add-WebConfigurationProperty $IISSite -Filter "system.webServer/aspNetCore" -Name environmentVariables -Value $environmentVariable

最后一行添加

<aspNetCore processPath=".\PathToMyApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout">
    <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
    </environmentVariables>
</aspNetCore>

到 web.config,一切就绪。

【讨论】:

  • 我没有 web.config。为 .Net Core 2 应用程序自动生成一个 web.config(我想是在构建时),所以由于我没有 web.config 文件,我不能把东西放在 in 中web.config 文件。我不知道为什么,但是如果我确实自己创建了一个 web.config 文件,它会导致通常来自 appsettings.json 的配置出现问题。而且,我也无权访问 IIS 服务器。我是多应用程序、企业级环境中的开发人员。我没有任何类型的管理员访问权限,也不知道关于 IIS 服务器管理的第一件事。
  • 我也没有 web.config。您无法访问部署脚本吗?你在使用 OTB tfs 脚本吗?
  • 我最终得到的答案与你的相似,所以虽然我没有使用你描述的方法(我不是一个有经验的 TFS 用户,我仍然不确定是什么“PS 远程处理”是),我给了它一个赞成票,因为它听起来像是一种合理的替代方法。
  • 很高兴它有所帮助,即使作为一个想法。 PowerShell 远程处理是一个强大的模块,它允许您访问远程机器(即部署服务器),并使您能够在这些机器上远程执行 PS 脚本(前提是您有权限)。如果您计划自定义 ci/cd 脚本(我相信您会及时),这将是非常有用的东西。
【解决方案2】:

您还可以使用“IIS Web App Manage”任务通过AdvancedAdditional appcmd.exe commands 部分设置变量:

set config "APPNAME" -section:system.webServer/aspNetCore /+"environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging']" /commit:site

但是,此脚本的多次执行都不起作用。也许有人有想法?

另见:How to set environment variables per site on IIS using appcmd.exe?

【讨论】:

    【解决方案3】:

    由于我无权访问服务器,服务器管理员拒绝跨多应用服务器设置全局环境变量,我无法在 Visual Studio 预发布版中预修改 web.config 文件,管理员找到了替代解决方案。

    由于我使用 TFS 构建/发布,他们向 TFS 添加了Patch XML File task 并指示我配置任务,如下所示:

    + /configuration/system.webServer/aspNetCore/- => "environmentVariables"
    + /configuration/system.webServer/aspNetCore/environmentVariables/- => "environmentVariable"
    = /configuration/system.webServer/aspNetCore/environmentVariables/environmentVariable/@name => "ASPNETCORE_ENVIRONMENT"
    = /configuration/system.webServer/aspNetCore/environmentVariables/environmentVariable/@value=> "Development"
    

    它似乎工作得很好:

    我必须说,这是我在 .Net Core 2.0 中唯一的求助方式,这很烦人。显然,作为一名服务器管理员或有权访问非常愿意更新服务器配置的人是正确使用 .Net Core 2 的必要条件。没有留下深刻印象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2018-08-18
      • 2020-07-13
      • 2022-07-29
      • 2023-01-24
      • 2018-07-22
      相关资源
      最近更新 更多