ClickOnce安装CefSharp Winforms问题

4
我尝试将我的CefSharp WinForms示例项目作为ClickOnce应用程序运行。在创建过程中一切都很顺利,但当我尝试安装程序时(当然,该程序没有问题),却没有任何反应!我尝试了许多不同的配置(发布、调试等)和平台(x86、x64),但问题始终存在。该怎么办?我正在使用Windows 10 64位上的Visual Studio 15。

代码总是有帮助的。另外,您是否检查了发布时包含的文件?如果您转到项目文件中的输出文件夹并运行输出的 .exe 文件,是否可以正常工作? - Pomadomaphin
嗯,如果我尝试运行output.exe的输出,当然可以工作。 - crasholino
发布版本中包含的文件是什么意思? - crasholino
当我在发布注释中包含文件时,恐怕我并没有完全理解这个问题。 - Pomadomaphin
请参见https://dev59.com/YZHea4cB1Zd3GeqPrJRY#34015902,初始问题涉及“WPF”,使用“Clickonce”与“CefSharp”的基础相同。 - amaitland
4个回答

14

最近我在部署ClickOnce应用程序时也遇到了这个问题。

我在CefSharp的Issues页面1314中找到了解决这个问题的方法,该方法由用户@CRoemheld提供,链接在此处

正如其他地方所指出的那样,ClickOnce只会将托管的.DLL作为其部署过程的一部分打包。

但我们还需要将本机的CEF DLL作为我们应用程序的一部分包含进来。

看起来在Visual Studio UI中没有简单的方法可以做到这一点(我尝试过),但您可以通过手动修改.csproj文件轻松实现。

打开您的.csproj文件,并在最后的</Project>标识符之前添加以下代码片段。

<ItemGroup>
<Content
Include="$(SolutionDir)packages\cef.redist.x86.3.2526.1362\CEF\**\*" Exclude="$(SolutionDir)packages\cef.redist.x86.3.2526.1362\CEF\x86\**\*;$(SolutionDir)packages\cef.redist.x86.3.2526.1362\CEF\locales\**\*.pak">
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
<Visible>false</Visible>
</Content>
</ItemGroup>

<ItemGroup>
<Content Include="$(SolutionDir)packages\cef.redist.x86.3.2526.1362\CEF\**\en-GB.*;$(SolutionDir)packages\cef.redist.x86.3.2526.1362\CEF\**\en-US.*">
  <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
  <Visible>false</Visible>
</Content>
</ItemGroup>

<ItemGroup>
<Content Include="$(SolutionDir)packages\cef.redist.x86.3.2526.1362\CEF\x86\**\*">
<Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
<Visible>false</Visible>
</Content>
</ItemGroup>

<ItemGroup>
<Content Include="$(SolutionDir)packages\CefSharp.Common.47.0.4\CefSharp\x86\**\CefSharp.BrowserSubprocess.*">
  <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
  <Visible>false</Visible>
</Content>
</ItemGroup>'

完成此操作后,在Visual Studio中,转到“发布”选项卡,单击“应用程序文件”按钮

在此输入图片描述

你将看到需要部署到应用程序中的CEFSharp依赖项。

在此输入图片描述


这是一个不错的方法,但自版本63以来,无需手动添加未管理的资源。请参阅https://github.com/cefsharp/CefSharp/wiki/Output-files-description-table-(Redistribution)获取所需文件列表。 - aydjay

1

我下载了CefSharp并使用了默认的WinForms示例。

在x64上构建时出现了问题,所以我跳过了它,使用了x86。

这导致oneclick启动器出现问题。日志文件显示由于清单问题而崩溃。

我发现了这个,其中建议更改设置。

“在项目属性 -> 应用程序选项卡 -> 资源 -> 复选框图标和清单中,将“使用默认设置嵌入清单”设置导致了问题。将其设置为“创建无清单的应用程序”即可解决问题。”

然后我删除了WinForms.example树下的清单文件。执行干净的构建和发布!

现在我的oneclick可以正常工作。

希望清单问题与您遇到的问题相同。


这对我不起作用。事实上,ClickOnce安装程序没有清单文件将无法工作。 - Monica Aspiras Labbao

0

经过几天的努力,我终于做到了。

  1. 右键单击项目 ---> 卸载项目
  2. 然后再次右键单击项目 ---> 编辑 projectname.csproj
  3. 在文件末尾,在闭合标签之前添加以下代码:http://codepaste.net/ir2h7s(块代码似乎现在无法正常工作:\)

  4. 右键单击项目 ---> 重新加载项目

  5. 发布您的应用程序!

0

我的答案与@Ocean Airdrop的相同, 但还有以下附加内容:

  1. 注意CEF版本。我有69.0.0
  2. 注意cef.redist版本。它应该与您项目中的版本相同。我的是3.3497.1841;
  3. 如果您正在使用x64,请同时包括x64。因此,更完整的代码片段如下:
<ItemGroup>
    <Content Include="$(SolutionDir)packages\cef.redist.x86.3.3497.1841\CEF\**\*" Exclude="$(SolutionDir)packages\cef.redist.x86.3.3497.1841\CEF\x86\**\*;$(SolutionDir)packages\cef.redist.x86.3.3497.1841\CEF\locales\**\*.pak">
      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Content Include="$(SolutionDir)packages\cef.redist.x86.3.3497.1841\CEF\**\en-GB.*;$(SolutionDir)packages\cef.redist.x86.3.3497.1841\CEF\**\en-US.*">
      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Content Include="$(SolutionDir)packages\cef.redist.x86.3.3497.1841\CEF\x86\**\*">
      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Content Include="$(SolutionDir)packages\CefSharp.Common.69.0.0\CefSharp\x86\**\CefSharp.BrowserSubprocess.*">
      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Content Include="$(SolutionDir)packages\cef.redist.x64.3.3497.1841\CEF\**\*" Exclude="$(SolutionDir)packages\cef.redist.x64.3.3497.1841\CEF\x64\**\*;$(SolutionDir)packages\cef.redist.x64.3.3497.1841\CEF\locales\**\*.pak">
      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Content Include="$(SolutionDir)packages\cef.redist.x64.3.3497.1841\CEF\**\en-GB.*;$(SolutionDir)packages\cef.redist.x64.3.3497.1841\CEF\**\en-US.*">
      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Content Include="$(SolutionDir)packages\cef.redist.x64.3.3497.1841\CEF\x64\**\*">
      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Content Include="$(SolutionDir)packages\CefSharp.Common.69.0.0\CefSharp\x64\**\CefSharp.BrowserSubprocess.*">
      <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
      <Visible>false</Visible>
    </Content>
  </ItemGroup>

此外,您仍需注意,在目标计算机上需要安装Visual Studio C++ Redist。否则它仍将无法正常工作。

我已将生成目标设置为AnyCPU,并按@Monica-Aspiras-Labbao所述编辑了.csproj文件,更改了CEF版本和cef.redist版本,并安装了Visual Studio C++ Redist,但ClickOnce应用程序无法启动。还需要编辑其他内容吗? - AUser123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接