在另一个项目中读取JSON文件的问题
伙计们,我在读取另一个项目中的某个Json文件时遇到了麻烦。我做了一个具有以下结构的示例项目。 Sample.UI.MVC,Sample.Infra.Data,Sample.Domain,Sample.Application。 在Sample.UI.MVC层中,我在Startup.cs文件中初始化Sample.Infra.Data项目中的类,该类在我的数据库中动态生成Seeds。但是,发生错误是因为EF Core试图在Sample.UI.MVC层而不是Sample.Infra.Data内部获取JSON文件。
我正在将Asp Net Core 2.2与VS Code一起使用 Seed \ Seed.cs
namespace Sample.Infra.Data.Seed
{
public class Seed
{
private readonly DataContext _context;
private readonly IHostingEnvironment hostingEnvironment;
private readonly UserManager<Usuario> _userManager;
public Seed(DataContext context, IHostingEnvironment hostingEnvironment)
{
_context = context;
hostingEnvironment = hostingEnvironment;
// _userManager = userManager;
}
public void SeedData()
{
try
{
// if (!_userManager.Users.Any())
// {
var userData = File.ReadAllText($"json/UserSeedData.json");
var users = JsonConvert.DeserializeObject<List<Usuario>>(userData);
AddNewType(users);
// }
_context.SaveChanges();
}
catch (Exception ex)
{
Console.WriteLine($"erro: {ex.Message}");
}
}
}
}
但是我得到了错误:
找不到路径的一部分
'D:\ App \ projects \ csharp \ asp \ core \ Sample.UI.MVC \ json \ UserSeedData.json'。
代码Seed.cs:
查看文件夹Json:
答案 0 :(得分:1)
这不是JSON问题,不是C#问题,也不是.Net Core 2x问题。
问题很简单:
Q:如果您尝试从相对路径读取文件,例如File.ReadAllText($"json/UserSeedData.json");
,那么.exe会在哪里显示?
A:无论您的.exe从哪里运行,它都会尝试在目录“ json”下查找文本文件“ UserSeedData.json”。
建议:
在项目的appsettings.json中定义“ JSONDIR”变量设置,然后在调用File.ReadAllText()
时将该路径附加到文件名中。
示例:
https://www.c-sharpcorner.com/article/setting-and-reading-values-from-app-settings-json-in-net-core/
另请参阅:
Sharing appsettings.json configuration files between projects in ASP.NET Core
答案 1 :(得分:1)
正在运行的项目(有Startup.cs
的地方)Sample.UI.MVC,并且该文件应位于该目录中。但是我认为您可以充分利用该项目的整个过程,并且应该可以正常工作。
尝试找到一种方法来获取项目的完整路径,并在Sample.Infra.Data
内部传递File.ReadAllText(...)
目录路径。