.net core 使用Azure DevOps的Delpoy NetCore应用程序
我在Azure DevOps服务器上创建了发布管道,但遇到了一些问题 如何更改.net核心配置文件(appsettings.EnvName.json)中的属性 当我在框架上创建应用程序时,我有.net core 使用Azure DevOps的Delpoy NetCore应用程序,.net-core,azure-devops,azure-pipelines,.net Core,Azure Devops,Azure Pipelines,我在Azure DevOps服务器上创建了发布管道,但遇到了一些问题 如何更改.net核心配置文件(appsettings.EnvName.json)中的属性 当我在框架上创建应用程序时,我有parameters.xml,其中我将XPath设置为value、default值和属性名。在管道上我设置了键值。但在net core应用程序上,此方法不起作用=) 我想使用大致相同的方法。我将如何指示该值及其值的路径。例如: ConnectionStrings.Db1="Server={DB1.Serve
parameters.xml
,其中我将XPath设置为value、default值和属性名。在管道上我设置了键值。但在net core应用程序上,此方法不起作用=)
我想使用大致相同的方法。我将如何指示该值及其值的路径。例如:
ConnectionStrings.Db1="Server={DB1.Server};Database={DB1.DbName};Trusted_Connection = True;"
ConnectionStrings.Db2="Server={DB2.Server};Database={DB2.DbName};Trusted_Connection = True;"
现在,我添加了在远程服务器上执行任意powershell脚本的步骤
$jsonFile = 'appsettings.Template.json'
$jsonFileOut = 'appsettings.Production.json'
$configValues =
'ConnectionStrings.Db1="Server={DB1.Server};Database={DB1.DbName};Trusted_Connection = True;"',
'ConnectionStrings.Db2="Server={DB2.Server};Database={DB2.DbName};Trusted_Connection = True;"'
$config = Get-Content -Path $jsonFile | ConvertFrom-Json
ForEach ($item in $configValues)
{
$kv = $item -split "="
Invoke-Expression $('$config.' + $kv[0] + '="' + $kv[1] + '"')
}
$config | ConvertTo-Json | Out-File $jsonFileOut
但是我真的不喜欢这个解决方案,我怎样才能以一种更漂亮的方式做同样的事情呢。基于app.config转换的完整框架。这意味着您定义了一个文件,该文件后来被转换为给定的构建配置(如调试、发布或您自己的)。在dotnet core中,可以为每个环境定义appsettings.json。这非常有效,因为所有设置都在编译的应用程序中。然后在运行时,根据
ASPNETCORE\u环境
环境变量选择适当的设置。因此,您的所有环境可能都有一个包,而无需重新编译。要从中受益,您必须为每个环境定义文件,但这不是转换。这是完整的文件
例如,用于本地开发的文件可能如下所示:
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
{
"ConnectionStrings": {
"BloggingDatabase": "Server=102.10.10.12\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
和您的开发环境的文件appsettings.dev.json
,如下所示:
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
{
"ConnectionStrings": {
"BloggingDatabase": "Server=102.10.10.12\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
然后要配置加载此文件,您必须配置Startup
方法:
公共启动(IHostingEnvironment环境)
{
var builder=new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile(“appsettings.json”,可选:true,重载更改:true)
.AddJsonFile($“appsettings.{env.EnvironmentName}.json”,可选:true)
.AddenEnvironmentVariables();
this.Configuration=builder.Build();
}
这将加载所有appsettings文件,然后根据环境变量使用适当的文件
要设置此变量,可以在命令提示符下使用此命令setx ASPNETCORE\u ENVIRONMENT Dev
或在Powershell[ENVIRONMENT]中使用此命令:setenvironment变量(“ASPNETCORE\u ENVIRONMENT”、“Dev”、“Machine”)
我希望它能帮助你理解设置是如何在dotnetcore上工作的。如果您需要更多指导,请查看以下链接:
{SomeVariable}
将被管道中的SomeVariable`值替换,以进行此确认
我了解系统环境,但如果我开始使用此方法,我必须将配置文件保存在存储库中。这种方式对我不合适。我不想将环境配置保存在code repository.Ok中。你检查过我最后的链接了吗?您可以使用tokenreplace或json变量substation。另一种方法是直接在应用程序中使用密钥库。您可以使用Azure Key Vault吗?也许您可以说一种更改属性并将其移动到环境的最佳方法。现在我有两个步骤:1。从工件2复制zip。把它部署到服务器上你能提出另一个问题并多说些什么吗?我有点担心这个评论没有足够的空间来回答你。