我该怎么办?
基本上,我想提交我的Visual Studio 2012项目,但它有一个我们传统上不提交的Debug文件夹。唯一的问题是Debug文件夹中包含项目的dll,如果我将dll移动到文件夹的父项,则项目不再编译。
所以这是结构:
项目文件夹> MSVC_2012>调试文件夹,sln文件等
在那个Debug文件夹中是dll。如何将它从Debug文件夹中移出到MSVC_2012?
答案 0 :(得分:1)
您的问题在细节上并不完全清楚,但这里有一些选项(以及您可以改进问题的方法):
您的问题看起来像an XY problem。您声明“如果我将dll移动到文件夹的父级,则项目不再编译。”在这种情况下,真正的问题是它不编译的原因。我们需要更多细节来弄清楚原因。你还需要更清楚你的意思是“如果我移动dll” - 你不能在编译之前“移动”一个DLL,如果你之后移动它,那么根据定义编译工作,所以实际上你的声明因为它没有意义。无论如何,你应该专注于修复破坏的构建而不是摆弄它以满足版本控制的需要。
您尚未指定DLL文件位于Debug文件夹中的原因。我认为这是因为你想将它提交给你的VCS(你没有明确说明你的目标)。在这种情况下,您是否意识到提交代码的二进制输出是不正常的做法?因此,一种解决方案可能是重新考虑您首先尝试提交DLL的原因。
您没有指定您正在使用的VCS。在Git中(我假设在大多数其他VCS中)你可以比整个文件夹更好地控制从提交中排除的内容。因此,另一个选择是将VCS配置为忽略Debug文件夹,但其中包含的任何DLL文件除外。
您可以更改MSVC将DLL文件放在Configuration Properties -> General -> Output Directory
下的项目属性页中的位置。大概这就是你提到“移动”DLL时的意思吗?
最后,根据其他人对您的问题的评论,如果您希望DLL位于两个位置,您可以使用构建后步骤将其复制到相关位置。要实现此目的,请转到Configuration Properties -> Build Events -> Post-Build Event
下的项目属性页面,然后输入相关命令(与在命令提示符下键入的命令相同)进行复制,例如{@ 1}},或者像Alex Farber建议的那样,使用VS宏以更通用的方式指定位置。 See this page获取可插入命令的可用宏列表。这应该被认为是最后的解决方案有两个原因 - (a)它是一个hack,因为你冗余地复制二进制输出来规避版本控制和/或构建中的缺点,当你应该在root修复问题时, (b)构建事件在Visual Studio中存在严重缺陷,即它们不允许继承值。这使得它们成为大型项目中的维护噩梦。