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

How can I bundle the VC++ 2015 redistributable with my ClickOnce (.NET) application?

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

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

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

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

'Visual C++ "14" Runtime Libraries (x86)' RunCheck result: Install Needed

Installation of components 'Visual C++ "14" Runtime Libraries (x86)' was accepted.

Copying files to temporary directory "C:\Users\Owner\AppData\Local\Temp\VSD3872.tmp\"

Downloading files to "C:\Users\Owner\AppData\Local\Temp\VSD3872.tmp\"

(8/4/2016 12:57:48 PM) Downloading 'vcredist_x86\vcredist_x86.exe' from 'http://go.microsoft.com/fwlink/?LinkID=800028&clcid=0x409' to 'C:\Users\Owner\AppData\Local\Temp\VSD3872.tmp\'

Download completed at 8/4/2016 12:57:49 PM

Downloading failed with HRESULT=-2146697208

该消息非常清楚问题所在:the link that it's trying to use to download the redist package is dead. Only... I'm not sure how I can tell it to find the correct link. I'm quite surprised that it can't find it automagically as that seems like a bug with Visual Studio. Some searching revealed that the correct link is actually 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 标签可以用来明确指定位置?或者我还能如何解决这个问题?如何在不破坏我的应用程序的情况下捆绑可再发行组件?

我遇到了几乎完全相同的问题。您询问了如何指定 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。顺便说一句,感谢您找到正确的下载link,直到看到这个post.

我才找到它

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