【问题标题】:In what ways does native multi-targeting affect the output of a build原生多目标以何种方式影响构建的输出
【发布时间】:2026-02-19 12:35:01
【问题描述】:

我有一个由 c++ 和 c# 项目组合而成的大型解决方案,其中大部分输出 dll。我们还有一个可执行文件,它取决于这些项目的输出。我们的整个解决方案目前是在 VS2005 中构建的。出于多种原因,我们的构建必须针对 v80,但我们终于找到时间迁移到 2010 IDE。

当我们在 2010 年构建时,我们的解决方案都可以正常编译,但是在运行应用程序时我们遇到了访问冲突。此异常发生在许多场景中,但始终在代码中的同一点发生 - 它也显示为“在用户回调期间遇到的异常”。如果我们编辑出异常抛出的代码行,它只是移动到其他地方,这是有道理的。我们遇到问题的场景如下:

2010 年针对 v80 工具集构建的所有 dll 和 exe。 所有 dll 均在 2005 年构建,exe 在 2010 年针对 v80 工具集构建。

但值得注意的是,如果我们使用 2010 年构建的 dll(针对 v80)而使用 2005 年构建的 exe,一切正常。

然后我的问题是:2005 年构建的输出与使用 v80 工具集的 2010 年构建的输出之间有什么区别?

以上内容可能取决于是否可以完全匹配构建的命令行参数(即 c++ 和链接器配置),因为我们可能还没有完全正确。如果需要,我可以链接 2005 年和 2010 年的设置。

任何帮助将不胜感激。

更新: 我最近在 2005 年创建了一个非常简单的应用程序,由 dll 和 exe 组成。 dll 有一个函数 static __declspec(dllexport) int add(int a, int b)。 exe 是一个简单的控制台应用程序,它从 dll 中调用 add 函数。

然后我将其移植到 VS2010 并将其设置为 v80 工具集。构建它会产生一个与原始大小相同的 dll,但 exe 大 4KB。我正在使用垃圾箱来尝试找出原因,但目前我不太清楚。如果其他人可以在这个简单的情况下确定为什么 exe 的大小不同,这可能有助于解决我的整体问题

【问题讨论】:

  • 您是否有任何建议的文档将v80 Platform Toolset 添加到 VS 2010?
  • 嗨,德里克。这里有一个名为 daffodil 的框架:daffodil.codeplex.com 可以为您执行此操作。我们已经用这个和一个定制的道具和目标文件尝试了我们的项目。这些文件位于以下文件夹中:%ProgramFiles%\MSBuild\Microsoft.Cpp\v4.0\Platforms\\PlatformToolsets 或 %ProgramFiles(x86)%\MSBuild\Microsoft.Cpp\v4.0\Platforms\ \PlatformToolsets 和更完整的信息可以在msdn博客上找到:blogs.msdn.com/b/vcblog/archive/2009/12/08/…

标签: visual-studio-2010 build msbuild access-violation multi-targeting


【解决方案1】:

现在解决了,这个问题是由于默认打开 DEP 引起的。我可以向其他任何人确认,如果您使用相同的编译器和链接器设置,构建的输出应该并且将完全匹配。

【讨论】: