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

aJ.*_*aJ. 13 c++ redistributable visual-studio-2008-sp1 visual-c++-2008 visual-c++

我们正在将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
Run Code Online (Sandbox Code Playgroud)

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

  • 具有用户管理员权限的计算机:我们建议在使用应用程序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更新),是否会出现任何问题.

谢谢.

小智 1

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