关于ASP.NET Core,我遇到了我不了解的行为。
在使用控制台应用程序以读取配置文件时,我通过以下方式将其复制到输出目录:
<ItemGroup>
<Content Include="mysettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
否则,如果我仅使用文件名而不是完整路径,则会得到FileNotFoundException
。
这样,我可以从其他项目中导入文件(例如其他设置jsons),并且效果很好。
到目前为止一切顺利。
但是,在ASP.NET Core中(我在带有ASP.NET Core后端的Blazor Web Assembly项目中工作更加具体),当我运行服务器项目时,设置不是从输出目录中读取,而是从项目中读取一。因此,在尝试从解决方案中的另一个项目读取设置文件时遇到错误,因为该应用程序在项目文件夹中而不是在输出文件夹中查找它。
我不确定是否相关,但是Directory.GetCurrentDirectory()
显示/BlazorApp/Server
,而我更希望/BlazorApp/Server/bin/Debug/netcoreapp3.1
。
这是ASP.NET Core中的预期行为吗?如果是这样,我该如何处理其他项目中的文件?我希望避免手动更新多个位置的设置。
预先感谢
答案 0 :(得分:0)
要访问“ /BlazorApp/Server/bin/Debug/netcoreapp3.1”,您需要使用(在System
名称空间中)AppDomain.CurrentDomain.BaseDirectory
您还可以在启动时添加另一个配置文件(或替换默认配置文件),如下所示:
public class Program
{
public static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory()) // This is the line you would change if your configuration files were somewhere else
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile("myappconfig.json", optional: false, reloadOnChange: false) // And this is the line you would add to reference a second configuration file other than appSettings.json
.Build();
BuildWebHost(args, configuration).Run();
}
public static IWebHost BuildWebHost(string[] args, IConfiguration config) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseStartup<Startup>()
.Build();
}`