跨项目访问SQL文件:测试项目读取其他项目SQL脚本的方法及构建设置
跨项目访问SQL文件的可靠方案及构建操作设置
必须设置构建操作
不管采用哪种访问方式,都需要对CreateTable.sql文件配置对应的构建操作,否则测试项目无法正常读取该文件。
两种可靠的访问方式
方式一:将SQL文件作为嵌入资源(推荐)
这种方式把SQL文件直接打包到ProjectOne的程序集内,不会出现文件丢失或路径错误的问题,是最稳定的方案:
- 在Visual Studio中选中
ProjectOne/Data/CreateTable.sql,打开属性窗口 - 设置生成操作为「嵌入的资源」,复制到输出目录保持「不复制」即可
- 在
DatabaseFixture.cs中通过程序集读取资源:
// 用ProjectOne中的任意类获取其程序集,比如项目内的数据实体类 var assembly = typeof(ProjectOne.Data.YourDataClass).Assembly; // 资源名称格式为「命名空间.目录结构.文件名」,默认命名空间与项目名一致 using var resourceStream = assembly.GetManifestResourceStream("ProjectOne.Data.CreateTable.sql"); using var reader = new StreamReader(resourceStream); string sqlContent = reader.ReadToEnd();
可以调用
assembly.GetManifestResourceNames()输出所有嵌入资源的名称,用来确认SQL文件对应的资源名是否正确。
方式二:将SQL文件复制到输出目录
如果需要随时修改SQL文件而无需重新编译项目,可采用这种方式:
- 选中
CreateTable.sql,设置生成操作为「内容」,复制到输出目录为「如果较新则复制」 - 在测试代码中通过运行目录的相对路径读取:
// AppContext.BaseDirectory指向当前测试程序集的运行目录 string sqlFilePath = Path.Combine(AppContext.BaseDirectory, "Data", "CreateTable.sql"); string sqlContent = File.ReadAllText(sqlFilePath);
注意:如果
ProjectOne与测试项目的输出目录层级不同,可能需要调整路径(比如添加../ProjectOne/bin/Debug/netX.x/Data/这类相对路径),但这种方式的稳定性不如嵌入资源。
内容的提问来源于stack exchange,提问作者LCaraway
相关产品推荐
相关产品推荐

