是否有使用宏_BIND_TO_CURRENT_VCLIBS_VERSION的副作用?

时间:2011-07-24 09:29:01

标签: c++ visual-c++ visual-studio-2008-sp1 visual-c++-2008 redistributable

我们正在将VC ++项目从Visual Studio 2003移植到Visual Studio 2008 SP1(9.0.30729.4148)。依赖的外部库也是 使用Visual Studio 2008 SP1编译。

MainApp - Main application Compiled with VS SP1 9.0.30729.4148
ExtStaticLib1 - External static library compiled with VS  SP1 9.0.30729.4148
ExtDynamicDll1 - External DLL compiled with VS  SP1 9.0.30729.4148

主应用程序有两种部署方案:

  • 具有用户管理员权限的计算机: 我们建议在使用应用程序MainApp之前先安装Visual Studio可再发行组件包。这很有效,因为用户具有管理员权限,并且安装可再发行组件包没有问题。应用程序自动链接到WinSxS文件夹中的VC redist DLL。
  • 非管理员用户的计算机: 这种情况有问题。用户没有管理员权限。因此,无法安装VS2008SP1 redistrtibutable包。

我们正在做以下事情来解决这个问题:

  • 使用宏_BIND_TO_CURRENT_OPENMP_VERSION编译MainApp目标(适用于MainApp中的所有项目)。

  • 将VS2008SP1可再发行DLL分发为私有程序集,并将它们复制到应用程序安装目录中。

问题:

  1. 使用标志_BIND_TO_CURRENT_VCLIBS_VERSION是否有任何副作用(特别是当VC可再发行程序包和私有VC redist程序集同时存在时)?
  2. 我们对外部库ExtStaticLib1,ExtDynamicDll1没有太多控制权,因此它们不会使用宏_BIND_TO_CURRENT_OPENMP_VERSION进行编译。但它们已经使用VSSp1编译。这个设置会有任何问题吗?
  3. 如果有更新版本的VS可再发行组件(比9.0.30729.4248更新),是否会出现任何问题。
  4. 感谢。

2 个答案:

答案 0 :(得分:2)

我会避免使用任何BIND宏。你会早点遇到麻烦。

即使您将VC运行时dll作为私有程序集分发,也无法确定用户是否已将其安装在其他应用程序中。

出现的一个问题是,您最终会得到一个引用多个c-runtime版本的清单。 Here这是一个公开的问题(仅供参考:我有同样的问题!)。

因此,如果没有理由迫使您只使用非常特定版本的c-runtime而不是最新的兼容版本,那么请不要使用那些定义宏!

答案 1 :(得分:1)

找到此博客资源,它可以回答您的问题。 请参阅“更新,补丁和服务包”部分 http://helgeklein.com/blog/2010/03/deploying-visual-c-runtime-files-as-private-assemblies/