ASP.NETCore支持一个新的配置系统,如下所示:https://docs.asp.net/en/latest/fundamentals/configuration.html
也支持这种模式吗?NET核心控制台应用程序?
如果不是,什么是替代以前的app.config
和ConfigurationManager
模型?
如果使用<code>Microsoft.Extensions。托管(版本2.1.0)以托管您的控制台应用程序和asp。net核心应用程序,您的所有配置都注入了HostBuilder
的ConfigureAppConfiguration
和
方法。下面是关于如何添加<code>appsettings的演示。json和环境变量:
var hostBuilder = new HostBuilder()
.ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables();
if (args != null)
{
// enviroment from command line
// e.g.: dotnet run --environment "Staging"
config.AddCommandLine(args);
}
})
.ConfigureAppConfiguration((context, builder) =>
{
var env = context.HostingEnvironment;
builder.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: false)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
// Override config by env, using like Logging:Level or Logging__Level
.AddEnvironmentVariables();
})
... // add others, logging, services
//;
为了编译上面的代码,你需要添加这些包:
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.1.0" />
您可以使用以下代码片段。它包括配置和DI。
public class Program
{
public static ILoggerFactory LoggerFactory;
public static IConfigurationRoot Configuration;
public static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8;
string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
if (String.IsNullOrWhiteSpace(environment))
throw new ArgumentNullException("Environment not found in ASPNETCORE_ENVIRONMENT");
Console.WriteLine("Environment: {0}", environment);
var services = new ServiceCollection();
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(Path.Combine(AppContext.BaseDirectory))
.AddJsonFile("appsettings.json", optional: true);
if (environment == "Development")
{
builder
.AddJsonFile(
Path.Combine(AppContext.BaseDirectory, string.Format("..{0}..{0}..{0}", Path.DirectorySeparatorChar), $"appsettings.{environment}.json"),
optional: true
);
}
else
{
builder
.AddJsonFile($"appsettings.{environment}.json", optional: false);
}
Configuration = builder.Build();
LoggerFactory = new LoggerFactory()
.AddConsole(Configuration.GetSection("Logging"))
.AddDebug();
services
.AddEntityFrameworkNpgsql()
.AddDbContext<FmDataContext>(o => o.UseNpgsql(connectionString), ServiceLifetime.Transient);
services.AddTransient<IPackageFileService, PackageFileServiceImpl>();
var serviceProvider = services.BuildServiceProvider();
var packageFileService = serviceProvider.GetRequiredService<IPackageFileService>();
............
}
}
哦,别忘了加上project.json
{
"version": "1.0.0-*",
"buildOptions": {
"emitEntryPoint": true,
"copyToOutput": {
"includeFiles": [
"appsettings.json",
"appsettings.Integration.json",
"appsettings.Production.json",
"appsettings.Staging.json"
]
}
},
"publishOptions": {
"copyToOutput": [
"appsettings.json",
"appsettings.Integration.json",
"appsettings.Production.json",
"appsettings.Staging.json"
]
},
...
}
对于 .NET Core 2.0 控制台应用,我执行以下操作:
{
"myKey1" : "my test value 1",
"myKey2" : "my test value 2",
"foo" : "bar"
}
配置为在生成项目时将文件复制到输出目录(在VS中-
在我的项目中安装以下nuget包:
将以下内容添加到Program.cs(或Main()
所在的位置):
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = builder.Build();
// rest of code...
}
然后使用以下方法之一读取这些值:
string myKey1 = configuration["myKey1"];
Console.WriteLine(myKey1);
string foo = configuration.GetSection("foo").Value;
Console.WriteLine(foo);
更多信息: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration
用于控制台应用程序项目目标。NETCore1.0,我不知道如何获得一个。exe在生成过程中输出。该项目在调试中运行良好。 我已经尝试过发布这个项目,但也不起作用。这是有意义的,因为EXE文件是特定于平台的,但必须有一种方法。我的搜索只找到了对旧版本的引用。使用project的NET核心版本。json。 每当我构建或发布时,这就是我得到的全部:
我试着把这个项目作为一个正常的参考。但是在重新构建解决方案之后,控制台应用程序仍然没有将.NET核心库作为参考。
我正在创建一个控制台应用程序使用。NET Core 3.1和我想有一个app设置json加载所有的环境,路径,变量,...在执行开始,然后从其他库类获取值。我创建了一个设置类,其中的数据包含在应用设置json中。这是我已经在教程中找到的,但我无法获得任何价值。 因为我不知道如何初始化所有东西,所以我不能做一个正确的主。。。我错过了什么?我想我一直在为这么简单的事情兜圈子。提前谢谢!注意:我需要从另
几个月前,我为控制台应用程序创建了第一个Dockerfile。这个控制台应用程序依赖于其他几个c#项目,因此它比您通常在互联网上找到的标准示例要复杂一些。Dockerfile“工作”,即我可以创建图像并运行容器。然而,我知道它有几个缺陷,现在是时候改进这个Dockerfile了。当前版本为 显然,需要解决文件的多次复制问题,但首先我想通过使用Alpine图像来减小图像大小。基于Microsoft示
sh wget progressbar colorama Gooey——把 CLI 程序变成 GUI
问题内容: 所有, 我已经用Java编写了基于命令行的PhoneBook应用程序。该应用程序基本上会询问用户的一些详细信息,例如姓名,年龄,地址和电话号码,并将它们存储在文件中。其他操作包括按名称,电话号码等查找电话簿。所有详细信息都通过控制台输入。 我正在尝试为我已实现的每个功能编写JUnit测试用例,但无法弄清楚如何将实现代码重定向到我的JUnit测试方法中的某个东西,当我的实际代码停止供用户