c# - 读取嵌入到 .NET 程序集中的数据

标签 c# .net dll reflection

对于一个学校项目,我不允许使用存储过程来存储我的 SQL 脚本。为了解决这个问题,我尝试在我的类程序集中创建一个 SQL_scripts 文件夹。

My project structure

现在我卡在如何从相对路径读取我的脚本上了?

这是我尝试过但没有成功的方法:

var appDomain = System.AppDomain.CurrentDomain;
                var basePath = appDomain.RelativeSearchPath ?? appDomain.BaseDirectory;
                string path = Path.Combine(basePath, "SQL_scriptes", "GetAllEmptyRoomsAtDateRange.sql");
                string query = File.ReadAllText(path);

但我总是在以下文件夹中:

  • MyProject\Tests\bin\Debug\SQL_scriptes\GetAllEmptyRoomsAtDateRange.sql

有什么想法吗?

最佳答案

您应该将带有 sql 代码的文件添加为嵌入式资源:

enter image description here

然后使用下面的函数从文件中获取SQL:

public string GetScript(string scriptName)
{
    var assembly = Assembly.GetExecutingAssembly();
    var resourceName = "Q46868043.SQL_scripts." + scriptName;

    using (Stream stream = assembly.GetManifestResourceStream(resourceName))
    using (StreamReader reader = new StreamReader(stream))
    {
        return reader.ReadToEnd();
    }
}

关于c# - 读取嵌入到 .NET 程序集中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46868043/

相关文章:

c# - 如何锐化/完成/更正图像中的文本

c# - 将水平条形图更改为垂直条形图

c# - 命名 bool 属性的 FDG 是什么?

.net - 如何获取属性覆盖属性?

windows - 加载依赖于其他 dll 的 dll ..?

c# - Asp.net core 为身份创建接口(interface)

C# (.Net 2.0) 微优化第 2 部分 : Finding Contiguous Groups within a grid

c# - 使用 Process.Start 时如何隐藏控制台应用程序用户界面?

c# - 为什么 .NET 找不到 OpenSSL.NET dll?

visual-studio - 如何从 Tcl 脚本访问第三方 DLL?