1

我正在尝试将使用特定库(在本例中为 Chilkat)的 Web 项目部署到 Web 主机(appharbor.com)。问题是该库需要 Visual Studio C++ 2010 运行时 (http://www.cknotes.com/?p=311)。我的问题是如何正确部署该运行时?

1.部署方式的选择

在我的本地开发机器上安装了运行时,但我只有 git push 访问托管环境。

基于MSDN,有三种部署运行时的选项:

  1. 使用可再发行包(推荐)
  2. 使用合并模块(需要管理权限)
  3. 与应用程序一起部署

选项 3 是我唯一可以对这台主机执行的操作,因为我没有对服务器的管理访问权限。

2.确定应该部署哪些dll

MSDN 页面指出 dll 应位于“Program Files\Microsoft Visual Studio 10.0\VC\Redist”中。在我的情况下,该位置不存在 Redist 目录(在 64 位上运行,所以我检查了“程序文件”和“程序文件(x86)”)。

我解压缩了可再发行包和其中的 vs_red.cab 以找到包含的 dll 列表: - atl100 - mfc100(+ 语言变体) - mfc100u - msvcp100 - msvcr100 - vcomp100 - msdia71

同时我检查了反射器中的库以查看引用的是什么:-Microsoft.VisualC(.net)-KERNEL32.dll(本机)-MSVCR100.dll(本机)-...还有一个没有名字的神秘库. 显示为带有空文本的模块。

旁注:这里使用的 chilkat 库有 x64 和 x86 版本。我使用 x86 执行这些任务只是因为目标系统似乎是 x86。(部署 x64 会导致“尝试加载格式不正确的程序。”错误。)

3.找到要部署的dll

解压后的 vc_red.cab 中的 dll 命名不正确,所以我决定在硬盘上查找 dll。搜索 atl100 发现三个位置:system32、syswow64 和作为应用程序目录的一部分。

上面提到的所有文件都在 system32 中,除了: - msdia71 (native) - 这与调试有关,根本不在我的磁盘上,所以我假设不需要它。- Microsoft.VisualC (.net) - 在 GAC 中找到了正确版本 (10.x)。

(我没有复制 KERNEL32.dll 因为这是一个 Windows 内置库。)

4. 将库添加到项目中

添加了 VisualC .net 库作为参考。本机库已添加到我的 Web 应用程序的根目录中,并且属性设置为“构建操作:内容”和“复制到输出:始终”。构建完成后,dll 按预期出现在 bin 文件夹中的 .net 库旁边。

但是当我部署和运行时,我收到错误消息:无法加载文件或程序集''或其依赖项之一。指定的模块无法找到。

您可以在这里看到项目的构建输出,我可以观察到我认为需要的 dll 正在被复制到输出目录,但某处仍然存在错误。有人有想法吗?还是更好的调试方法?还是我在做一些愚蠢的事情:)?

4

2 回答 2

0

我看到的一些选项:

  • 联系主机支持以在服务器上安装 VC++
  • 联系 Chilkat 支持
  • 在本地服务器上部署并打开 Fusion (http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.80).aspx)
于 2011-07-15T08:32:05.133 回答
0

您可以将 dll 添加到根项目中。然后,单击每个 dll -> 单击属性 -> 设置“构建操作”:内容,并设置“复制到输出目录”:始终复制。

现在构建并检查您的垃圾箱。dll在那里。

我使用这种方式将引用添加为现有项目并浏览 dll 给出了一些无法加载 dll 的错误。

我喜欢将 dll 分组到一个文件夹中,然后将它们放在没有父文件夹的 bin 中,但还不能做到这一点。

于 2021-01-27T22:22:23.123 回答