C++ cli C++;/CLI预编译头:它们是如何工作的?

C++ cli C++;/CLI预编译头:它们是如何工作的?,c++-cli,reference,precompiled-headers,pch,C++ Cli,Reference,Precompiled Headers,Pch,我正在尝试编写一个混合模式DLL,我们称之为“客户机”,用它们的托管等价物替换一些非托管类。在我的个人机器上,一切都很好,但是当我签入源代码时,我们的构建机器不会构建项目。它无法识别我正在使用的另一个DLL(称为“Core”)中的托管类 我认为这个问题与预编译头有关。原因如下: 为了使用“Core”中的类,我在“Client”项目中添加了对“Core”项目的引用。如果我删除此引用,然后在我的个人计算机上构建项目,它仍然有效。但是,CLR PCH在删除引用后不会重新编译。如果我重新编译CLR PC

我正在尝试编写一个混合模式DLL,我们称之为“客户机”,用它们的托管等价物替换一些非托管类。在我的个人机器上,一切都很好,但是当我签入源代码时,我们的构建机器不会构建项目。它无法识别我正在使用的另一个DLL(称为“Core”)中的托管类

我认为这个问题与预编译头有关。原因如下:

为了使用“Core”中的类,我在“Client”项目中添加了对“Core”项目的引用。如果我删除此引用,然后在我的个人计算机上构建项目,它仍然有效。但是,CLR PCH在删除引用后不会重新编译。如果我重新编译CLR PCH,然后编译项目,它将失败,并出现与生成计算机上相同的错误:无法识别托管类

在我看来,您导入的DLL中的托管类是在预编译头中定义的。我还没能证实这一点,但这是我最好的猜测。有人对这个问题有什么见解吗?混合DLL中的项目引用是否通过将挂钩放入托管PCH中来解决

复制步骤

以下这些对我来说毫无意义:

  • 让客户端进行构建
  • 删除从客户端到核心的引用。编译客户端。客户端仍在构建。这是预料不到的
  • 重新编译客户端PCH,然后编译客户端。编译客户端失败:“核心”中的类未定义。这是预期的行为
  • 添加对核心的引用,编译。编译客户端由于同样的原因失败。这是预料不到的
  • 重新编译客户端PCH,然后编译客户端。客户编译得很好

  • 我从这个实验中得出的结论是,引用是通过预编译头插入到项目中的,并且这种工作方式有问题,至少在我们的构建机器上是这样。

    它不能这样工作,因为您不需要使用预编译头。
    PCH所做的只是允许您加快构建速度。

    它对引用没有任何特殊的作用。…

    它不能像它那样工作,因为您不需要使用预编译的头。
    PCH所做的只是允许您加快构建速度。

    在C++/CLI中,向托管/混合模式dll添加引用的另一种方法是使用Core.dll向客户端添加引用。这可能会解决您的构建问题。

    在C++/CLI中,有另一种方法可以添加对托管/混合模式dll的引用,那就是将#using Core.dll添加到客户端。这可能会解决您的构建问题。

    编译时,我偶尔会发现一个错误:#在“…Core.dll”上使用失败。当我双击htis错误时,它会将我指向PCH的cpp文件。这就是为什么我认为它会将引用放入PCH。那么,如果你的项目根本没有PCH,它会怎么做?是否确定已正确设置项目依赖项?i、 项目客户依赖于项目核心。这也可能是调试/发布问题吗?请注意,这绝对不是调试/发布问题。“Project References”选项卡忽略调试与发布模式。您提供的Microsoft Support文章不适用于我的位置,因为我在生成计算机上遇到的问题不是“#using fails”,而是它显示在Core.dll中定义的类“Entry”,未定义。如果您在原始问题中添加了所有这些额外信息,可能会有所帮助。为了记录在案,你说你得到了一个“#using failed”错误,所以我的链接是完全相关的。嘘。整个问题都很不清楚,我只希望我不去管它,反正PCH显然不是你的问题。每隔一段时间,在编译时,我会发现一个错误:#在“…Core.dll”上使用失败。当我双击这个错误时,它会指向PCH的cpp文件。这就是为什么我认为它会将引用放入PCH。那么,如果你的项目根本没有PCH,它会怎么做?是否确定已正确设置项目依赖项?i、 项目客户依赖于项目核心。这也可能是调试/发布问题吗?请注意,这绝对不是调试/发布问题。“Project References”选项卡忽略调试与发布模式。您提供的Microsoft Support文章不适用于我的位置,因为我在生成计算机上遇到的问题不是“#using fails”,而是它显示在Core.dll中定义的类“Entry”,未定义。如果您在原始问题中添加了所有这些额外信息,可能会有所帮助。为了记录在案,你说你得到了一个“#using failed”错误,所以我的链接是完全相关的。嘘。这个问题太不清楚了,我真希望我不要管它,反正PCH显然不是你的问题。