如何获取迁移文件夹内生成的文件列表?GetAssembly()方法无效
获取迁移文件夹文件列表的可行方案
直接读取文件系统路径
迁移文件夹本质是项目内的物理目录,绕开程序集加载的问题,直接用文件系统API读取最直接:
// 开发环境测试用硬编码路径 var migrationFiles = Directory.GetFiles(@"../YourProjectName/Migrations", "*.cs"); // 运行时动态拼接路径(推荐) var baseDir = AppContext.BaseDirectory; var migrationDir = Path.Combine(baseDir, "Migrations"); var migrationFiles = Directory.GetFiles(migrationDir, "*.cs", SearchOption.TopDirectoryOnly);
借助EF Core的迁移元数据匹配文件
如果是EF Core的迁移,可先通过DbContext获取已注册的迁移名称,再对应到物理文件:
using var dbContext = new YourDbContext(); var migrationNames = dbContext.Database.GetMigrations(); var migrationDir = Path.Combine(AppContext.BaseDirectory, "Migrations"); var migrationFiles = migrationNames .Select(name => Path.Combine(migrationDir, $"{name}.cs")) .Where(File.Exists) .ToList();
修复GetAssembly()的使用问题
之前调用GetAssembly()失败,通常是迁移所在程序集未被当前进程加载,可尝试显式加载:
// 加载迁移程序集(替换为你的迁移程序集实际路径) var migrationAssembly = Assembly.LoadFrom("./YourMigrationAssembly.dll"); // 获取所有迁移类型,反推对应文件名 var migrationTypes = migrationAssembly.GetTypes() .Where(t => typeof(Microsoft.EntityFrameworkCore.Migrations.IMigrationMetadata).IsAssignableFrom(t)); var migrationFiles = migrationTypes.Select(t => $"{t.Name}.cs").ToList();
内容的提问来源于stack exchange,提问作者Jayanth Prakash
相关产品推荐
相关产品推荐

