Read a file compile-time in C#

前端 未结 6 1270
攒了一身酷
攒了一身酷 2021-01-05 13:37

I am writing some unit tests in which I need a fake xml file. I can create that file and require it to be deployed with the unit tests, but experience shows that at my offic

相关标签:
6条回答
  • 2021-01-05 14:18

    Use a resources (resx file) and add your xml file. Then you can access using MyNs.MyResources.MyXmlFile.

    0 讨论(0)
  • 2021-01-05 14:18

    If the contents are static, why can't you commit it to source control? Add it to your project and then it will always be exactly where you expect it to be.

    0 讨论(0)
  • 2021-01-05 14:25

    Why don't you include it in a resource?

    0 讨论(0)
  • 2021-01-05 14:29

    You can do this with a T4 template. What you need is 3 things

    1. Create your template file, which will generate your .cs code
    2. Include your text file (or *.sql file) in the same project as your template file
    3. Configure your template to re-create your t4 template on every build

    Something like this for your template.tt file

    <#@ 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 #>");
            }
        }
    }
    

    If you don't want to configure your template to be re-created on the build then just opening it and saving it will do the trick.

    0 讨论(0)
  • 2021-01-05 14:36

    You can go the resource file route but, depending on how many resources/how large they are (and XML can be large), you may eventually run into compilation problems (I did).

    I've since transitioned from resources to singletons. Reading a text file in with File.ReadAllText is pretty dead simple and it's still IntelliSense-friendly.

    0 讨论(0)
  • 2021-01-05 14:39

    I usually add such test files directly into the unit test C# project and set them as "Content" and "Copy if newer" to be copied to the bin directory during the compilation.

    0 讨论(0)
提交回复
热议问题