在哪里可以找到一些官方说明、kb 文章或其他描述 Visual Studio 2010 C/C++ 运行时链接和部署策略更改的文档?
在 Visual Studio 2008(带有 VC90 运行时)下,清单嵌入在本机映像中,运行时库被部署为并行程序集 (WinSxS)。这在使用 VS 2008 SP1 重建本机 exe 或库时会导致问题,因为嵌入式清单需要 C++ 运行时的更新版本。
对于 VS 2010 和 MSVCR100 运行时版本,该策略似乎已经完全改变。
- 文件 msvcr100.dll 和其他 C/C++ 运行时库不再作为 SxS 程序集安装。
- 在 VS2010 下编译时,不会将运行时“依赖”条目添加到嵌入式清单中,这意味着任何版本的 msvcr100.dll 都可能在运行时加载。
- 在安装了 .NET 4 的机器上,匹配的运行时名为 msvcr100_clr0400.dll,并且不会由本机代码加载,尽管重命名为 msvcr100.dll 的副本可以正常工作。我认为这意味着任何带有 C/C++ 代码的进程总是会加载相同 C/C++ 运行时的两个版本。
这似乎是政策上的重大变化,从我们在 VS 2008 下的 SxS 部署和清单依赖项回溯。任何人都可以更清楚地了解发生了什么变化,并可能指向一些文档、描述这些变化的自述文件或博客文章,动机和相关影响?
它认为这样更好——强大的版本清单和 SxS 部署是一场噩梦——但我对 VS 2010 中这些意想不到且看似未记录的变化感到惊讶。
额外问题:如何在 VS 2010 下编译我的 C++/CLI 库以链接到 msvcr100_clr0400.dll 而不是 msvcr100.dll?这个想法是 C++/CLI 程序集应该在没有依赖项的情况下运行,除了 .NET 4 安装的依赖项(没有静态链接)。