如何将HTML代码放入.resx资源文件?

Mar*_*cel 4 html c# asp.net resx internationalization

奇怪的是,之前没有人问过这个......

我正在为4种语言创建模板化的HTML电子邮件.我想将HTML模板放入我的.resx文件中,以便通过代码轻松,国际化地访问它们.像这样:

.resx文件:

<data name="BodyTemplate" xml:space="preserve">
    <value><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
            <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
            <title>Title</title>
            ...
        </body>
        </html>
    </value>
</data>
Run Code Online (Sandbox Code Playgroud)

但是,显然,编译器抱怨.resx文件中的HTML.有没有办法在.resx文件中使用HTML(或XML).怎么样?

我使用.NET版本4和dotLiquid作为模板引擎,如果这很重要的话.

Sam*_*uel 9

建议:创建所需的文件,按照您想要的方式命名,例如"my_template.html"然后将此文件添加到您的项目中.

单击它,然后在属性窗口中选择"构建操作"并将其设置为"嵌入式资源".

每当您想要访问此文件时,您都可以使用类似的东西(没有正确的使用块:

    public static string ReadTextResourceFromAssembly(string name)
    {
        using ( var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( name ) )
        {
            return new StreamReader( stream ).ReadToEnd();
        }
    }
Run Code Online (Sandbox Code Playgroud)

根据您的需求量身定制.上面的方法获取资源,比如你已将资源放在项目MyProject的"HtmlTemplates并调用它"my_template.html"子目录中,然后你可以通过名字访问它 MyProject.HtmlTemplates.my_template.html

然后,您可以将其写入文件或直接使用,等等.

这有一些主要的好处:你项目中看到你的html文件,它有html扩展名,所以在Visual Studio中编辑它有语法高亮,所有工具都应用于.html文件.

我有一堆用于单元测试的方法,这个方法将数据提取到文件中:

    public static void WriteResourceToFile(string name, string destination)
    {
        using ( var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( name ) )
        {
            if ( stream == null )
            {
                throw new ArgumentException( string.Format( "Resource '{0}' not found", name), "name" );
            }

            using ( var fs = new FileStream( destination, FileMode.Create ) )
            {
                stream.CopyTo( fs );
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


Pro*_*mer 5

encoded html.resx文件,然后让后面的html使用

@Html.Raw(Server.HtmlDecode(...resource...));
Run Code Online (Sandbox Code Playgroud)