【问题标题】:C#: How to read file at compile-time [duplicate]C#:如何在编译时读取文件[重复]
【发布时间】:2016-06-03 19:49:30
【问题描述】:

假设我的 Visual Studio 项目中存储了一个文本文件(例如 SQL 查询)。有什么方法可以将文件的内容保存到在编译时的变量中?我只想在自己的文件中有一些文本,而不是在我的源代码中有一个很长的引号字符串;但我不希望不得不部署(或跟踪)文件的麻烦。

【问题讨论】:

  • 真的在编译时而不是运行时?
  • 编译时意味着您希望将该文件的内容编译到您的源代码中。运行时是:好的,我需要运行这个查询,从文件中读取它并运行它。你追求的是哪一个?
  • 作为资源嵌入并在需要时使用...
  • @Cᴏʀʏ 但您仍然可以在运行时读取文件并将查询保存在内存中以供以后使用,而不必立即执行......这就是我问的原因,有点困惑。
  • 将您的文本/查询放在资源文件中并从那里访问如何?

标签: c#


【解决方案1】:

您可以使用 T4 模板执行此操作。你需要的是三样东西

  1. 创建您的模板文件,该文件将生成您的 .cs 代码
  2. 将文本文件(或 *.sql 文件)包含在与模板文件相同的项目中
  3. Configure your template to re-create your t4 template on every build

你的template.tt文件是这样的

<#@ template debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ Assembly Name="System.Core" #>
<#@ Assembly Name="System.Windows.Forms" #>
<#@ import namespace="System" #>
<#@ import namespace="System.IO" #>
<#
   string TextFromFile = File.ReadAllText(Host.ResolvePath("my_file_next_to_my_template.txt"));
#>
// This is the output code from your template
namespace MyNameSpace
{
    class MyGeneratedClass
    {
        static void main (string[] args)
        {
            System.Console.WriteLine("<#= TextFromFile #>");
        }
    }
}

如果您不想将模板配置为在构建中重新创建,那么只需打开它并保存即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2014-04-19
    • 2015-11-23
    • 2013-03-19
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多