2013-08-02 67 views
1

我有一个VS2012解决方案。项目A之一在运行时生成一个.h文件。此头文件由另一个项目B使用。项目A和项目B位于同一个目录中。Microsoft.CppClean.targets删除我需要的文件

但是,当项目B开始重建时,C:\ Program Files文件(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V110 \ Microsoft.CppClean.targets删除项目A生成的文件。由于此项目B无法找到该文件,并且构建失败。

如何避免在干净构建过程中被删除的文件?这两个项目应该移到不同的目录吗?

注意,在Visual Studio中不会出现此问题2008

回答

1

你有没有设置在溶液中build order?必须明确设置项目B依赖于A,除非使用project referencing functionality built into VS直接设置两个项目之间的依赖关系。

+0

是的,项目依赖关系设置正确。项目A首先构建并在运行时生成文件。当项目B开始构建时,它会删除这些文件,尽管项目B需要构建这些文件。 – Amol

+0

@YonatanSimson然后问一个新的问题 – Mgetz

1

这个头是由“Build Event”在temp(“Intermediate”)目录中生成的吗?如果是这样,那么项目B假定它是一个临时文件并将其删除。这是因为项目B的清理发现头中的temp目录,但不知道它的项目A.可能的解决方案的输出:

  • 单独从临时文件夹中的输出文件夹,并生成输出头夹。
  • 将输出和临时文件夹保持在一起,但将项目A的输出/临时文件夹与项目B的输出/临时文件夹分开。
  • 在自定义构建步骤而不是构建事件中生成标题,并将标题指定为输出的步骤。
0

我在迁移到VS 2015时遇到同样的问题。解决方法是将“Configuration Property-> General-> Intermediate Directory”设置为.. \\ $(ProjectName)\,以使Build.CppClean不会'从其他不相关的项目中清理以前的构建DLL。这对我有效。