6 c# configuration .net-core asp.net-core
假设我有以下字符串:
c:\testmypath
Run Code Online (Sandbox Code Playgroud)
在 C# 中,如果我想在没有标签的情况下使用内部代码,我可以执行以下操作:
string t = @"c:\testmypath";
Run Code Online (Sandbox Code Playgroud)
但是,如果我想从配置文件中读取它;假设一个appsettings.json
看起来像这样:
{
"MyPath": "c:\testmypath"
}
Run Code Online (Sandbox Code Playgroud)
以下代码导致在控制台中显示一个选项卡:
static void Main(string[] args)
{
var path = returnString();
Console.WriteLine(path);
Console.ReadLine();
}
static string returnString()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = builder.Build();
return configuration["MyPath"];
}
Run Code Online (Sandbox Code Playgroud)
我可以通过转义配置文件中的路径来解决这个问题;例如:
{
"MyPath": "c:\\testmypath"
}
Run Code Online (Sandbox Code Playgroud)
通过,我可以以某种方式逃避单斜杠版本吗?我试过了:
return @configuration["MyPath"];
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,它确实可以编译,但没有任何效果。我也试过.ToString()
,虽然我不确定为什么我认为这会奏效。
C# 和 JSON 是具有不同句法规则的不同语言(毕竟,JSON 看起来不像 C#),尽管它们关于字符串外观的规则有点相似。
由于您正在处理 JSON 文件,因此 C# 的字符串规则(特别是逐字字符串)不适用,但 JSON 的规则适用。在这些规则中,您必须像\\
每次一样逃避反斜杠。没有其他办法。否则\t
,正如您所注意到的,序列实际上意味着 Tab。
事后没有真正的方法来解决这个问题。取决于\
您获得某些东西后的字符,例如 Tab,或者在尝试读取 JSON 文件时出现解析错误。\t
如果您知道您正在处理文件路径,则可以将 Tab 变回,但我不推荐它。如前所述,如果反斜杠后面的字符不是 a t
,则无论如何您都可能会收到错误而无法恢复。
至于您在 C# 方面“转义”错误版本的尝试:@
具有不同的含义,具体取决于它的使用位置:
@"string"
是一个逐字字符串,其中几乎可以逐字写入任何内容而不必担心转义字符。唯一的例外是""
字符串内的双引号。但实际上,它最常用和方便,例如 Windows 上的文件路径和正则表达式,当必须转义每个反斜杠时,这两者都非常烦人。@name
使任何关键字或其他名称成为有效标识符。您可以为每个标识符加上前缀@
,这会使有效程序稍长一些,但不会改变其语义的任何内容。它纯粹是编译器的东西,类似于例如using
指令。虽然这两个特性使用相同的特性并且有一些类似的想法,但它们的工作方式并不相同,当然,它们在运行时都没有影响。它们仅用于编译器。
归档时间: |
|
查看次数: |
5199 次 |
最近记录: |