在C#WebBrowser中加载本地HTML文件

在C#WebBrowser中加载本地HTML文件,c#,webbrowser-control,C#,Webbrowser Control,在我的应用程序中,我有一个WebBrowser元素 我想在其中加载一个本地文件 我有一些问题: 放置HTML文件的位置(以便在用户执行设置时也将安装该文件) 如何引用该文件?(例如,我猜用户的安装文件夹并不总是相同的) 编辑 我已将HTML文件添加到我的项目中 我对它进行了设置,以便将其复制到输出文件夹 当我检查它时,它在运行:\bin\Debug\Documentation\index.html时出现 但是,当我执行以下操作时,webbrowser元素中会出现“页面无法显示”错误 我使用以下代

在我的应用程序中,我有一个WebBrowser元素

我想在其中加载一个本地文件

我有一些问题:

  • 放置HTML文件的位置(以便在用户执行设置时也将安装该文件)
  • 如何引用该文件?(例如,我猜用户的安装文件夹并不总是相同的)
  • 编辑

    我已将HTML文件添加到我的项目中

    我对它进行了设置,以便将其复制到输出文件夹

    当我检查它时,它在运行:\bin\Debug\Documentation\index.html时出现

    但是,当我执行以下操作时,webbrowser元素中会出现“页面无法显示”错误

    我使用以下代码尝试在Webbrowser中显示HTML文件

    webBrowser1.Navigate(@".\Documentation\index.html");
    
  • 在你要运行的程序集附近的某个地方
  • 使用反射获取执行程序集的路径,然后使用一些魔法来定位HTML文件
  • 像这样:

    var myAssembly = System.Reflection.Assembly.GetEntryAssembly();
    var myAssemblyLocation = System.IO.Path.GetDirectoryName(a.Location);
    var myHtmlPath = Path.Combine(myAssemblyLocation, "my.html");
    
  • 将其放在应用程序设置文件夹或下面的单独文件夹中
  • 当应用程序运行时,将其相对于当前目录引用
  • 在Visual Studio中的文件上单击鼠标右键->属性
  • 将“复制到输出目录”设置为“始终复制”
  • 然后,您将能够通过使用路径(如
    @.\my_html.html“

    “复制到输出目录”将在生成项目时将该文件与二进制DLL放在同一文件夹中。这适用于任何内容文件,即使其位于子文件夹中

    如果您使用子文件夹,该子文件夹也将复制到bin文件夹中,因此您的路径将是“
    @”\my\u subfolder\my\u html.html”

    为了创建一个可以在本地使用(而不是通过web提供)的URI,您需要使用文件协议,使用二进制文件的基本目录-注意:仅当您如上所述将副本设置为Ouptut目录或路径不正确时,这才有效

    这就是您需要的:

    string curDir = Directory.GetCurrentDirectory();
    this.webBrowser1.Url = new Uri(String.Format("file:///{0}/my_html.html", curDir));
    
    当然,您必须更改变量和名称

    很晚了,但这是我从谷歌找到的第一个热门网站

    不要使用当前目录或获取程序集,只需使用
    应用程序.ExecutablePath
    属性:

    //using System.IO;  
    string applicationDirectory = Path.GetDirectoryName(Application.ExecutablePath);
    string myFile = Path.Combine(applicationDirectory, "Sample.html");
    webMain.Url = new Uri("file:///" + myFile);
    

    请注意,
    文件://
    方案在紧凑型框架上不起作用,至少在5.0中不起作用

    您需要使用以下各项:

    string appDir = Path.GetDirectoryName(
        Assembly.GetExecutingAssembly().GetName().CodeBase);
    webBrowser1.Url = new Uri(Path.Combine(appDir, @"Documentation\index.html"));
    

    对我有效的是

    <WebBrowser Source="pack://siteoforigin:,,,/StartPage.html" />
    
    
    

    从。我将StartPage.html复制到与xaml文件相同的输出目录,并从该相对路径加载它

    windows10
    uwp
    应用程序

    试试这个:

    webview.Navigate(new Uri("ms-appx-web:///index.html"));
    

    以上@ghostJago答案更新

    对我来说,它在
    VS2017

    string curDir = Directory.GetCurrentDirectory();
    this.webBrowser1.Navigate(new Uri(String.Format("file:///{0}/my_html.html", curDir)));
    

    我从这里尝试了不同的答案,但成功地得到了一些有用的东西,就是:
    1-将页面添加到我在项目级别创建的名为WebPagesHelper的文件夹中
    2-通过webBrowser控件打印页面

    string curDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);                
    var uri = new Uri(curDirectory);
    string myFile = Path.Combine(uri.AbsolutePath, @"WebPagesHelper\index.html");
    Uri new_uri = new Uri(myFile);
    
    我必须获得程序集路径,创建第一个uri以获得绝对路径,而不附加'file://',接下来我将此绝对路径与其文件夹中页面的相对路径相结合,然后根据结果生成另一个uri。

    然后将其传递给webBrowser URL属性
    webBrowser.URL=new_uri

    表示它是一个vebatim字符串。在C#中,通过使用@,您不必费心转义任何字符,因为@意味着将其视为文字。您应该使用@作为路径,否则您需要这样做。“\\my\u html.html”我还应该提到,当应用于路径时,@“\”表示当前的directorytnx不知道这一点。但是它不起作用(一定是我做错了:))。当我这样做时:
    webBrowser1.Url=@“\Documentation\index.html”我收到一个错误:字符串无法转换为Uri。当我尝试时:
    webBrowser1.Url=newuri(@“.\Documentation\index.html”)我获取:无效的URI:无法确定URI的格式。好的,请尝试此
    字符串curDir=Directory.GetCurrentDirectory()
    this.webBrowser1.Url=新Uri(String.Format(“file:///{0}/my_html.html”,curDir))您需要编辑变量,可能还需要编辑文件名。我已经试过了works@ghotsJago:太好了!它现在正在工作。请使用此解决方案更新您的答案好吗?请记住,compact framework上没有此解决方案,并且必须使用
    Path.GetDirectoryName(Assembly.getExecutionGassembly().GetName().CodeBase)
    。但是我应该将html文件复制到哪里。在*.sln文件所在的位置下?在项目目录下?或者在资产目录中?如果在项目目录下:“ms appx”-web:///index.html“,如果在资产”ms appx下-web:///Assets/index.html"