在C#中读取文件编译时

时间:2011-07-07 15:44:52

标签: c# compilation

我正在编写一些单元测试,其中我需要一个假的xml文件。我可以创建该文件,并要求它与单元测试一起部署,但经验表明,在我的办公室,这是一个很头疼的问题。所以我决定该文件将由UT创建。

StreamWriter sw = new StreamWriter(testFileName);
sw.Write(contents);
sw.Close();

现在问题是内容字符串。它实际上是一个很长的xml,如下所示:

string contents = 
@"<?xml version="1.0" encoding="windows-1251"?>
  <blah>
  ~100 lines here
  </blah> ";

我不希望它与其余代码位于同一个文件中。我希望从文件生成编译时字符串。

在C ++中,我会这样做

string contents = "
#include "test.xml"
   ";

C#中有可能以某种方式存在吗?

6 个答案:

答案 0 :(得分:9)

为什么不将它包含在资源中?

答案 1 :(得分:1)

使用资源(resx文件)并添加xml文件。然后,您可以使用MyNs.MyResources.MyXmlFile访问。

答案 2 :(得分:0)

我通常会将这些测试文件直接添加到单元测试C#项目中,并在编译过程中将它们设置为“Content”和“Copy if newer”复制到bin目录。

答案 3 :(得分:0)

如果内容是静态的,为什么不能将它提交给源代码控制?将它添加到您的项目中,然后它将始终完全符合您的预期。

答案 4 :(得分:0)

你可以去资源文件路由,但是,根据资源的数量/数量(以及XML可能很大),你最终可能遇到编译问题(我做过)。

我已经从资源转变为单身人士。使用File.ReadAllText读取文本文件非常简单,它仍然是智能感知友好的。

答案 5 :(得分:0)

您可以使用T4模板执行此操作。你需要的是3件事

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

    这样的内容
    template.tt

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