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

时间:2016-08-04 19:23:22

标签: c# c++ .net clickonce vcredist

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

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

VCRUNTIME140.dll missing

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

Prerequisites on Publish tab

这在理论上听起来很棒,但它并不起作用。现在,当我尝试在客户端计算机上安装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 \ AppData \ Local \ Temp \ VSD3872.tmp \'

     

下载截止日期为2016年8月4日12:57:49

     

下载失败,HRESULT = -2146697208

这条消息非常清楚问题是什么:the link它试图用来下载redist包已经死了。只有......我不确定如何告诉它找到正确的链接。我很惊讶它无法自动找到它,因为这似乎是Visual Studio的一个错误。有些搜索显示正确的链接实际上是this one,但这不是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>

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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