Output embedded resources into Razor views

In relation to my ASP.NET MVC Areas in separate projects thing I needed to share some tiny bits of javascript and css between pages in this separate project. Could probably be solved better by looking into the bundling stuff, but as a quick fix I decided to just compile the javascript and css files into the assembly and output them raw into my views. Quick and simple.

  1. Set the Build Action of your js and css file to Embedded Resource
  2. Add this extension method to a static class.
    public static IHtmlString RawResource(this HtmlHelper html, Type type, string resourceName)
    {
        using (var s = type.Assembly.GetManifestResourceStream(resourceName) ?? new MemoryStream())
        using (var r = new StreamReader(s))
        {
            s.Position = 0;
            return new HtmlString(r.ReadToEnd());
        }
    }
  3. Make sure the extension method is available in your view
    @using The.Namespace.Of.My.Static.Class
  4. Use the method in your view
    <script type="text/javascript">
        @Html.RawResource(typeof(AnyClassInAssembyOfEmbeddedResource), "Default.Namespace.Of.Project.Resources.file.js");
    </script>

    <style type="text/css">
        @Html.RawResource(typeof(AnyClassInAssembyOfEmbeddedResource), "Default.Namespace.Of.Project.Resources.file.min.css")
    </style>

Easy peasy. And slightly hackish and ugly… let me know if you have smoother, cleaner bundling approach 😉

If you’re having problems figuring out the right name of your embedded resource, see my post on how to use embedded resources for how to list them all out.