...自从我最初发表评论以来,我发现 VS 2017 和 MS Build for .NET Core 完全支持 web.config 转换,一旦您意识到嵌套和转换构建命令不需要不再是项目的一部分。 不要再在您的 web.config 上使用“添加配置转换” 命令,除非您找到不会损坏项目文件的修复程序。只需手动添加 web.config 的转换版本,它们就会自动嵌套并在发布时运行。是的 VS 2017!
您的 web.Release.config 中的以下内容可以很好地设置您的环境变量。
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<location>
<system.webServer>
<aspNetCore>
<environmentVariables>
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" xdt:Locator="Match(name)" xdt:Transform="SetAttributes" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
此外,使用 .NET Core 2.2,您不再需要将额外的 appsettings 转换(关闭您的环境变量)添加到您的 Startup 类。这个默认...
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
...自动处理接受的答案代码。
底线是,作为一个毫无歉意的 Microsoft 开发人员,我仍然想假设我的应用程序只会使用 MS Build 和 Web Deploy 发布到 IIS 服务器,并且我希望能够通过应用程序自己的配置;我希望能够在 Build 上执行此操作,而不是作为发布或发布后命令行命令。如果 Microsoft 或某人为 Visual Studio 创建了一个简单的构建插件,它将转换我的 appsettings.json 文件,所以我只发布给定环境所需的内容,我很乐意使用它,但我还没有找到,或者没有是时候写一篇了。
所以我确保直接回答 OP 的问题:AppSettings 可以轻松地从 web.config 转移到 appsettings.json,并且可能应该,只要您了解所有 appsettings.json 文件都已发布,并且在运行时确定,这与真正的转换解决方案不同,后者仅根据请求的配置文件发布必要的文件和设置。仅使用 web.config 转换来设置确定使用哪个 appsettings.{env}.json 文件所需的环境变量。同样,如果我们可以按照 OP 的要求将我们的 apsettings.json 文件转换为与我们的 web.config 相同的文件,那么整个讨论都会按照 Dodo 的方式进行。我有一种感觉,它总有一天会到来,如果还没有的话。
是的,从旧版 .NET Framework 迁移到 .NET Core 可能是一个有趣的练习。 .NET Core 向前迈出了一大步,但还有一些障碍需要克服;特别是对于那些从一开始就继承遗产的人。