【问题标题】:Referencing embedded resources from an embedded resource从嵌入资源引用嵌入资源
【发布时间】:2012-04-20 20:10:20
【问题描述】:

我正在使用 WinForms 浏览器控件来显示我作为资源嵌入的 html 文件中的一些内容。

我现在想在我的应用程序中嵌入一些脚本和样式表,但如果可能的话,我不知道如何从 html 页面引用其他嵌入文件。

我当前的解决方案是在显示之前加载资源并将它们添加到浏览器控件的文档中,但是如果我想使用 JQuery 之类的东西,这可能会有点混乱。

【问题讨论】:

    标签: c# winforms resx


    【解决方案1】:

    如果脚本和样式表与 HTML 文件位于同一目录树中,则可以使用相对路径(例如 <script src="../scripts/myFoo.js" />)。还是我错过了什么?

    【讨论】:

    • myFoo.js 将像 html 文件一样作为资源嵌入到可执行文件中,因此不存在相对路径之类的东西。
    • 我明白了——您希望它们作为应用程序中的嵌入式资源。不知怎的,我错过了。在那种情况下,我认为您当前的解决方案可能是合理的,即使它有点混乱。
    • 我正在考虑接受这个答案,因为它让我意识到我太努力变得聪明了。最后我所做的是压缩所有 html 资源,并在第一次运行时将其提取到用户的 AppData 目录中,根本不用担心将脚本或 CSS 注入到 WebBrowser 控件的文档中。
    • 这似乎也是一个完全合理的方法。
    【解决方案2】:

    嵌入文件,然后在渲染之前将每个文件提取到临时文件夹:

    string ret = ResourceUtility.GetTempFileFromEmbeddedResource(Assembly.GetExecutingAssembly(),
        "outlook.addin.a.html", "a.html");
    
    var bsjs = ResourceUtility.GetTempFileFromEmbeddedResource(Assembly.GetExecutingAssembly(),
        "outlook.addin.bootstrap.js.bootstrap.min.js", "bootstrap.min.js");
    
    public static string GetTempFileFromEmbeddedResource(Assembly assembly, string resourceName, string fileName)
    {
        string output;
        using (Stream s = ResourceUtility.GetEmbeddedResourceStream(assembly, resourceName))
        {
            StreamReader sr = new StreamReader(s);
            output = sr.ReadToEnd();
        }
    
        return CreateLocalTempFile(output, fileName);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-10-30
      • 2010-09-07
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      相关资源
      最近更新 更多