在 TFS 中为 .Net Core 2 配置 ASPNETCORE_ENVIRONMENT
Configuring ASPNETCORE_ENVIRONMENT In TFS for .Net Core 2
我们现在遇到无法调试开发服务器环境的问题:
现在,我花了很多时间搜索如何设置 ASPNETCORE_ENVIRONMENT,但我只找到了两种(实用的)方法:
- 创建一个 web.[MYCONFIGURATION].config 文件并添加以下内容,其中 [MYCONFIGURATION] 类似于 Development 或 Release:
web.[我的配置].config:
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
- 在部署的服务器上设置 IIS 变量以启用 ASPCORE_ENVIRONMENT
以下是每个问题:
- 由于 .NET Core 使用 appsettings.json 文件进行配置(据我所知,从中生成 web.config),如果我们的数据库连接字符串和其他设置丢失我们自己创建一个 web.config。
- 我们 运行 处于企业级多应用程序环境中,结合了 .NET Core 和非核心 ASP.NET 应用程序(我无权访问),所以仅为我们的应用程序更改 IIS 的设置不是一个选项。
需要注意的是,我们正在使用 TFS 的 Build/Release 发布到我们的开发服务器。我曾希望添加 "development" 的 BuildConfiguration 变量也可以设置 ASPNETCORE_ENVIRONMENT,但不幸的是它没有。
我怎样才能只为我们的应用程序设置 ASPNETCORE_ENVIRONMENT 而无需 web.config 或 IIS 设置?或者,如果这目前不可能,考虑到我所描述的限制条件,我怎样才能使这两个选项之一起作用?
我认为我没听对,在我看来你快到了。我们有类似的设置,这是我的部署的样子。
本质上,您不会从 appsettings.json 创建 web.config
。根据 web.config 中设置的 ASPNETCORE_ENVIRONMENT
值,您告诉您的应用程序(IIS 后面的 Kestrel 上的 运行)使用哪个 appsettings.[Env].json
。不太确定
是什么意思
things like our database connection strings and other settings get
lost if we create a web.config ourselves
我所有的部署脚本都使用 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,一切就绪。
由于我无法访问服务器,服务器管理员拒绝在 multi-app 服务器上设置全局环境变量,我不能 pre-modify web.config 文件 Visual Studio pre-release,管理员找到了替代解决方案。
由于我 building/releasing 使用 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 的必要条件。印象不深。
您还可以使用 "IIS Web App Manage" 任务通过 Advanced
和 Additional appcmd.exe commands
部分设置变量:
set config "APPNAME" -section:system.webServer/aspNetCore /+"environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging']" /commit:site
但是,多次执行此脚本无效。也许有人有想法?
另请参阅:
我们现在遇到无法调试开发服务器环境的问题:
现在,我花了很多时间搜索如何设置 ASPNETCORE_ENVIRONMENT,但我只找到了两种(实用的)方法:
- 创建一个 web.[MYCONFIGURATION].config 文件并添加以下内容,其中 [MYCONFIGURATION] 类似于 Development 或 Release:
web.[我的配置].config:
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
</environmentVariables>
- 在部署的服务器上设置 IIS 变量以启用 ASPCORE_ENVIRONMENT
以下是每个问题:
- 由于 .NET Core 使用 appsettings.json 文件进行配置(据我所知,从中生成 web.config),如果我们的数据库连接字符串和其他设置丢失我们自己创建一个 web.config。
- 我们 运行 处于企业级多应用程序环境中,结合了 .NET Core 和非核心 ASP.NET 应用程序(我无权访问),所以仅为我们的应用程序更改 IIS 的设置不是一个选项。
需要注意的是,我们正在使用 TFS 的 Build/Release 发布到我们的开发服务器。我曾希望添加 "development" 的 BuildConfiguration 变量也可以设置 ASPNETCORE_ENVIRONMENT,但不幸的是它没有。
我怎样才能只为我们的应用程序设置 ASPNETCORE_ENVIRONMENT 而无需 web.config 或 IIS 设置?或者,如果这目前不可能,考虑到我所描述的限制条件,我怎样才能使这两个选项之一起作用?
我认为我没听对,在我看来你快到了。我们有类似的设置,这是我的部署的样子。
本质上,您不会从 appsettings.json 创建 web.config
。根据 web.config 中设置的 ASPNETCORE_ENVIRONMENT
值,您告诉您的应用程序(IIS 后面的 Kestrel 上的 运行)使用哪个 appsettings.[Env].json
。不太确定
things like our database connection strings and other settings get lost if we create a web.config ourselves
我所有的部署脚本都使用 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,一切就绪。
由于我无法访问服务器,服务器管理员拒绝在 multi-app 服务器上设置全局环境变量,我不能 pre-modify web.config 文件 Visual Studio pre-release,管理员找到了替代解决方案。
由于我 building/releasing 使用 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 的必要条件。印象不深。
您还可以使用 "IIS Web App Manage" 任务通过 Advanced
和 Additional appcmd.exe commands
部分设置变量:
set config "APPNAME" -section:system.webServer/aspNetCore /+"environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Staging']" /commit:site
但是,多次执行此脚本无效。也许有人有想法?
另请参阅: