如何将VC++ 2015可再发行组件与我的ClickOnce(.NET)应用程序捆绑在一起?

soa*_*gem 6 .net c# c++ clickonce vcredist

我在通过Microsoft ClickOnce部署的.NET Framework 4.5上运行了一个C#应用程序.我还在使用一个名为DComPerm.exe的Microsoft SDK中的小实用程序,这是一个C++应用程序,我必须单独编译.我的主应用程序用于Process.Start()访问此可执行文件.

当我第一次尝试在客户端计算机上运行它时,我收到一条错误消息,指出当应用程序尝试调用DComPerm.exe时VCRUNTIME140.dll丢失.

VCRUNTIME140.dll缺失

这是有道理的...因为该程序是用C++编译的,所以它需要Visual C++ 2015 Redistributable包,它尚未安装在客户机上.我想让它尽可能轻松,所以我希望我可以将VC++ 2015 Redist与我的ClickOnce应用程序捆绑在一起.在项目属性>发布选项卡下,有一个前提条件按钮,它允许我指定应用程序应该捆绑可再发行组件包.

这在理论上听起来很棒,但它不起作用.现在,当我尝试在客户端计算机上安装ClickOnce应用程序时,它不起作用.安装失败并指向一个日志文件,其中包含以下相关信息:

'Visual C++"14"运行时库(x86)'RunCheck结果:需要安装

安装组件的Visual C++"14"运行时库(x86)'已被接受.

将文件复制到临时目录"C:\ Users\Owner\AppData\Local\Temp\VSD3872.tmp \"

将文件下载到"C:\ Users\Owner\AppData\Local\Temp\VSD3872.tmp \"

(8/4/2016 12:57:48 PM)将'vcredist_x86\vcredist_x86.exe'从' http://go.microsoft.com/fwlink/?LinkID=800028&clcid=0x409 '下载到'C:\ Users\Owner \应用程序数据\本地的\ Temp\VSD3872.tmp \"

下载完成于2016年8月4日12:57:49 PM

下载失败,HRESULT = -2146697208

这消息使得它很清楚是什么问题:链接,它正试图使用下载的REDIST包已经死了.只有...我不知道怎么能告诉它找到正确的链接.我很惊讶它无法自动找到它,因为这似乎是Visual Studio的一个错误.一些搜索显示正确的链接实际上是这个,但这不是ClickOnce正在解决的.我还看到通过选中框,这是我的csproj文件的相应XML更新:

<BootstrapperPackage Include="Microsoft.Visual.C++.14.0.x86">
  <Visible>False</Visible>
  <ProductName>Visual C++ "14" Runtime Libraries %28x86%29</ProductName>
  <Install>true</Install>
</BootstrapperPackage>
Run Code Online (Sandbox Code Playgroud)

我可以使用一些XML标记来明确指定位置吗?或者我怎么能解决这个问题?如何在不破坏我的应用程序的情况下捆绑可再发行组件?

Dil*_*lon 5

我遇到了几乎完全相同的问题。您询问了如何指定 ClickOnce 解析的下载位置。为此,请打开

C:\Program Files (x86)\Microsoft Visual Studio 14.0\SDK\Bootstrapper\Packages\vcredist_x86\en\package.xml
Run Code Online (Sandbox Code Playgroud)

并将属性编辑为Name="https://go.microsoft.com/fwlink/..."正确的 URL。顺便说一句,感谢您找到正确的下载链接,直到看到这篇文章我才找到它。

执行此操作后,VC++ Redis 在客户端计算机上正确安装。