【问题标题】:Lost target files in Visual Studio 2008Visual Studio 2008 中的目标文件丢失
【发布时间】:2009-01-22 00:03:21
【问题描述】:

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

[编辑:有两级间接导致问题]

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

 我的解决方案
    MyCppDll(创建非托管 DLL)
    MyCSharpWrapper(非托管 DLL 的托管包装器)
    MyCSharpLibrary(包含访问包装器的类)
    MyCSharpProgram(从 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。

还有其他人遇到过这个问题吗?我使用的是 Visual Studio 2008,尚未升级到 SP1。

[编辑 - 问题似乎是文件没有被复制,除非有从 Program 项目到 Wrapper 项目的直接引用。也就是说,如果我在 MyCSharpProgram 项目中添加对 MyCSharpWrapper 的引用,则会复制 DLL。同样,这只发生在 IDE 中。从命令行构建时,如果没有该引用,它可以正常工作。]

【问题讨论】:

  • 投反对票?提供解释性评论是惯例。

标签: visual-studio-2008


【解决方案1】:

在使用 Build 时,我们遇到了 Visual Studio 以及混合 C++ 和 C# 项目的问题。然后我们切换到只使用 Rebuild 并且它起作用了。您可能从命令行重新构建并在 IDE 中构建。

顺便说一句,难道不是这个引用需要在那里,因为项目以某种方式依赖它吗?

【讨论】:

  • Stefan 说得对。引用不可传递。您需要添加参考。
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多