moh*_*sen 5 c# entity-framework-core asp.net-core
我的 EF 项目在一个项目中,而我的 ASP.NET Core 项目在另一个项目中,
D:\AspProjects\DatabaseHafez> <=== 我的 ef 模型在这个文件夹中
D:\AspProjects\Hafez> <=== 我的aspnet core 3 在这个文件夹中
所以每个项目都有一个 bin 文件夹。
下面的构建器(ConfigurationBuilder)应该有用于读取连接字符串的 appsettings.json 文件的路径。所以下面有这个路径 =>
D:\AspProjects\DatabaseHafez\bin\Debug\netcoreapp3.1\appsettings.json
但是我的 asp.net 核心项目中的 appettins.json 文件因此在构建后将复制到输出文件夹 =>
D:\AspProjects\Hafez\bin\Debug\netcoreapp3.1\appsettings.json
那么如何找到输出文件夹路径?
public class AppDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
{
AppDbContext IDesignTimeDbContextFactory<AppDbContext>.CreateDbContext(string[] args)
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
var context = new AppDbContext(optionsBuilder.Options);
context.Database.EnsureCreated();
return context;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想添加迁移但出现错误
D:\AspProjects\DatabaseHafez>dotnet ef migrations add changed98112601
Build started...
Build succeeded.
Run Code Online (Sandbox Code Playgroud)
System.IO.FileNotFoundException: 未找到配置文件“appsettings.json”并且不是可选的。物理路径是“D:\AspProjects\DatabaseHafez\bin\Debug\netcoreapp3.1\appsettings.json”。
在 Microsoft.Extensions.Configuration.FileConfigurationProvider.HandleException(ExceptionDispatchInfo info)
在 Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
在 Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
在 Microsoft.Extensions.Configuration.ConfigurationRoot.. ctor(IList 1 工厂)1 providers)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at DatabaseHafez.AppDbContextFactory.Microsoft.EntityFrameworkCore.Design.IDesignTimeDbContextFactory<DatabaseHafez.AppDbContext>.CreateDbContext(String[] args) in D:\AspProjects\DatabaseHafez\AppDbContextFactory.cs:line 27
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContextFromFactory(Type factory)
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.<>c__DisplayClass13_1.<FindContextTypes>b__9()
at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func
Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) 中的)
在 Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType) 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor .AddMigration.<>c__DisplayClass0_0.<.ctor>b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_0`1.b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)未找到配置文件“appsettings.json”,该文件不是可选的。物理路径是“D:\AspProjects\DatabaseHafez\bin\Debug\netcoreapp3.1\appsettings.json”。
现在我想知道如何找到bin我的 ASP.NET Core 项目的文件夹?
对于.net core,您可以使用PlatformServices.Default.Application.ApplicationBasePathnuget pkgMicrosoft.Extensions.PlatformAbstractions
这适用于任何运行时,无论是 Web 应用程序还是测试运行时。
从 .Net5+ 使用AppContext.BaseDirectory它取代上面的内容。
试着把它写成这样:
var runDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)
Run Code Online (Sandbox Code Playgroud)
GetCurrentDirectory可能也有用,但这里有这个错误:https : //github.com/dotnet/project-system/issues/589所以我会避免它。
您需要获取当前目录。
Directory.GetParent(typeof(Program).Assembly.Location).FullName;
Run Code Online (Sandbox Code Playgroud)
这将返回正确的目录。
| 归档时间: |
|
| 查看次数: |
5609 次 |
| 最近记录: |