【问题标题】:How can I bundle the VC++ 2015 redistributable with my ClickOnce (.NET) application?如何将 VC++ 2015 可再发行组件与 ClickOnce (.NET) 应用程序捆绑在一起?
【发布时间】:2016-08-04 19:23:21
【问题描述】:

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

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

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

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

'Visual C++ "14" Runtime Libraries (x86)' RunCheck 结果:需要安装

已接受组件“Visual C++ "14" Runtime Libraries (x86)”的安装。

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

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

(2016 年 8 月 4 日下午 12:57:48)将“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 标记可以用来明确指定位置?或者我还能如何解决这个问题?如何在不破坏我的应用程序的情况下捆绑可再发行组件?

【问题讨论】:

  • since that program was compiled in C++ it needs the Visual C++ 2015 Redistributable package 仅当您链接到 CRT DLL 时。为什么不静态链接 CRT,而不是(/MT,请参阅 CRT Library Features)?
  • @dxiv 你在这里说的听起来很有希望,但我不太明白。您是说可以将 DLL 构建到可执行文件本身中,从而消除对单独的可再发行文件的需求?
  • 使用静态链接的 CRT,程序将不依赖于 VCRUNTIME DLL。参见例如How do I make a fully statically linked .exe with Visual Studio Express 2005?(它与 VS 2015 相同)。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的帮助!仅供参考,这里是x64 version 的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多