我的解决方案主要是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),该目录包含所有AND MyCppDll.dll。
还有其他人遇到过这个问题吗?我正在使用Visual Studio 2008,尚未升级到SP1。
[编辑 - 问题似乎是除非从程序项目直接引用到Wrapper项目,否则不会复制文件。也就是说,如果我在MyCSharpProgram项目中添加对MyCSharpWrapper的引用,则会复制DLL。同样,这只发生在IDE中。从命令行构建时,它在没有该引用的情况下工作正常。]
答案 0 :(得分:1)
使用Build时,我们遇到了visual studio和混合C ++和C#项目的问题。然后我们切换到只使用Rebuild并且它有效。您可能从命令行重建并在IDE中构建。
顺便说一句,这个引用不一定需要存在,因为项目以某种方式依赖于它?