gpt4 book ai didi

visual-studio-2010 - 视觉C++ 2010 : Changes to MSVC runtime deployment (no more SxS with manifest)

转载 作者:行者123 更新时间:2023-12-02 14:34:16 25 4
gpt4 key购买 nike

在哪里可以找到描述 Visual Studio 2010 C/C++ 运行时链接和部署策略更改的官方说明、知识库文章或其他文档?

在 Visual Studio 2008(带有 VC90 运行时)下, list 嵌入到 native 镜像中,并且运行时库被部署为并行程序集 (WinSxS)。当使用 VS 2008 SP1 重建 native exe 或库时,这会导致问题,因为嵌入式 list 需要更新版本的 C++ 运行时。

对于 VS 2010 和 MSVCR100 运行时版本,该策略似乎已完全更改。

  1. 文件 msvcr100.dll 和其他 C/C++ 运行时库不再作为 SxS 程序集安装。
  2. 在 VS2010 下编译时,嵌入 list 中不会添加任何运行时“依赖项”条目,这意味着任何版本的 msvcr100.dll 都可能在运行时加载。
  3. 在安装了 .NET 4 的计算机上,匹配的运行时名为 msvcr100_clr0400.dll,并且不会由 native 代码加载,但重命名为 msvcr100.dll 的副本可以正常工作。我认为这意味着任何具有 C/C++ 代码的进程将始终加载同一 C/C++ 运行时的两个版本。

这似乎是政策上的重大变化,从 SxS 部署回溯以及我们在 VS 2008 下的 list 依赖关系。任何人都可以更详细地说明发生了什么变化,也许可以指出一些文档、自述文件或描述了的博客文章这些变化的动机和相关影响?

我认为这种方式更好 - 强版本 list 和 SxS 部署是一场噩梦 - 但我对 VS 2010 中这些意外且看似未记录的更改感到惊讶。

额外问题:如何在 VS 2010 下编译 C++/CLI 库以链接到 msvcr100_clr0400.dll 而不是 msvcr100.dll?这个想法是,C++/CLI 程序集运行时不应依赖于 .NET 4 安装的依赖项(无静态链接)。

最佳答案

您已经回答了大部分问题,CRT 的并行部署是一场噩梦,让太多程序员陷入了困境。 Microsoft 同意并在 VS2010 版本中放弃了它。它又回到了c:\windows\system32 中的一个DLL,名为msvcr100.dll。还有msvcp100.dll、vcomp100.dll、atl100.dll、mfc100.dll、mfcm100.dll等其他运行时支持DLL。 VS2003 及更早版本的情况就是这样。现在,解决 DLL Hell 问题又成为用户的负担。最不可能做到这一点的人,但他们往往有预算来支付支持费用。与需要从免费网站获得帮助的程序员不同:)

但是您可以提供帮助,应用程序本地部署现在再次启用,您可以将 msvcr100.dll 部署在与主 EXE 相同的目录中。这在以前的版本中被明确检查和禁止。 App-local 有一些优点,它将您与善意但不幸的破坏您的应用程序的更新隔离开来。尽管您现在自己负责部署修复安全漏洞的更新。如果这不舒服,那么部署并依赖系统目录中的副本。

请勿尝试链接到 msvr100_clr0400.dll,这是供 CLR 使用的私有(private)副本。与 msvcr.dll 非常相似,它是供 Microsoft DLL 使用的私有(private)副本。您没有链接到这些 DLL 所需的 .lib 文件。

关于visual-studio-2010 - 视觉C++ 2010 : Changes to MSVC runtime deployment (no more SxS with manifest),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com