代码之家  ›  专栏  ›  技术社区  ›  Jim Mischel

Visual Studio 2008中丢失了目标文件

  •  0
  • Jim Mischel  · 技术社区  · 17 年前

    我的解决方案主要是C语言,但是我有一个C++项目,它创建了我的C代码调用的DLL。布局如下:

    [已编辑:有两个级别的间接寻址,这会导致问题]

    我们将此解决方案称为MySolution。它有四个项目:

      MySolution
        MyCppDll  (creates an unmanaged DLL)
        MyCSharpWrapper (Managed wrapper for the unmanaged DLL)
        MyCSharpLibrary (Contains classes that access the wrapper)
        MyCSharpProgram (Creates classes from MyCSharpLibrary)
    

    我已正确设置了依赖项,以便首先编译MyCppDll,然后编译包装器、库和程序。但是,在IDE中构建时,MyCppDll的输出不会复制到MyCSharpLibrary的输出目录。

    我可以通过为MyCSharpLibrary创建一个构建后步骤,将MyCppDll.dll复制到MyCSharpLibrary\bin\Debug(或\Release)目录来解决这个问题。

    但在编译MyCSharpProgram时,它会获取与包装器和库关联的文件,但不会获取DLL。同样,我可以创建一个构建后步骤来完成它,但这并不理想,原因有两个。

    真正的解决方案有几十个项目,其中许多引用了MyCSharpLibrary。正如您可以想象的那样,为每一步创建后期构建步骤都是令人厌烦且容易出错的。每次我添加引用该程序集的新项目时,我都必须创建另一个后期构建步骤。

    这应该是没有必要的。当我从命令行构建该解决方案时,DLL将按预期从MyCSharpLibrary目录复制。也就是说,从IDE生成的目录MyCSharpProgram\bin\Debug包含MyCSharpProgram.exe、MyCSharpLibrary.dll、MyCSharpWrapper.dll(以及相关的.pdb文件)。但是,如果我从命令行生成(使用MSBuild),目录将包含所有这些内容和MyCppDll.dll。

    [编辑-问题似乎是,除非有从程序项目到包装器项目的直接引用,否则不会复制文件。也就是说,如果我在MyCSharpProgram项目中添加对MyCSharpWrapper的引用,则会复制DLL。同样,这只发生在IDE中。在从他使用命令行。]

    1 回复  |  直到 17 年前
        1
  •  1
  •   Stefan Steinegger    17 年前

    在使用Bug时,我们遇到了VisualStudio和混合C++和C类项目的问题。然后我们切换到只使用重建,它工作了。您可能会从命令行重建并在IDE中生成。

    顺便问一下,难道这个参考不需要存在吗,因为项目在某种程度上依赖于它?