为每个环境部署不同的连接字符串

时间:2017-12-01 11:22:53

标签: asp.net-core-2.0 asp.net-core-configuration

我正在尝试从mac部署IIS上的asp.net核心2.0 api项目。

我想要做的是为我的开发,登台和生产环境设置不同的appsettings.json文件,然后使用dotnet -build作为我的部署脚本的一部分调用不同的环境。

我看过https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments这是旧版.net核心的内容,我无法理解我需要做的事情。我不是为操作系统设置环境,而是以编程方式设置它(因为我的登台和生产环境是针对同一台服务器的)

我有一个appsettings.Development.json文件,它在我运行我的应用程序时使用,但我似乎无法在设置环境变量作为构建命令的一部分时加载我的appsettings.Production.json文件。

bash$ ASPNETCORE_ENVIRONMENT=Production dotnet run
Using launch settings from /Properties/launchSettings.json...
Hosting environment: Development
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

最终,我正在尝试根据我构建的环境部署特定的连接字符串。有更好的方法吗?

更新

@Chris的回答有帮助,另外我发现了以下内容:

每个IIS应用程序池 如果需要为在隔离的应用程序池中运行的各个应用程序设置环境变量(在IIS 10.0+上受支持),请参阅IIS参考文档中环境变量主题的AppCmd.exe命令部分。

让我为每个应用程序池设置不同的环境

1 个答案:

答案 0 :(得分:8)

该文档不适用于旧版本的ASP.NET Core。那里的一切仍然适用,而且全部都是布局的,所以我不确定这里的混淆究竟在哪里。

以最简单的形式,您只需创建一个或多个appsettings.{environment}.json个文件。默认情况下,首先加载appsettings.json,然后加载appsettings.{environment}.json,如果存在,则加载与当前环境匹配的appsettings.json文件。这允许您覆盖主appsettings.json文件中的设置,特别是对于环境。但是,更好的方法是仅在ASPNETCORE_ENVIRONMENT中放置不受环境影响的全局设置,然后将所有特定于环境的设置保留到特定于环境的文件中。

无论如何,在任何一种情况下,部署应用程序时都会复制所有设置文件。 ASP.NET Core项目不是基于像旧的ASP.NET项目那样的特定配置发布的。这意味着可以在多个不同的环境中部署相同的已发布文件,而无需重新发布。

在运行时使用的环境由true环境变量的值决定。只需在服务器上设置它应该是什么,然后你就可以了。

如果您在IIS后面运行,则需要再多做一步。默认情况下,应用程序池不会加载环境变量。您可以通过在IIS中编辑应用程序池的高级属性并更改设置来更改此设置&#34;加载用户配置文件&#34;到<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Import</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/jquery-1.12.4.js"></script> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> <script src="script.js"></script> <link rel="stylesheet" type="text/css" media="screen and (min-device-width: 500px)" href="style.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> </head> <body> <form> <!-- show import data --> </form> <form id="importForm" action="${pageContext.request.contextPath}/ImportData" method="post" onsubmit="return importValidation();" enctype="multipart/form-data"> <input type="file" name="file" accept=".txt"/> <input type="submit" value="Import"> </form> </body> </html>