在Visual Studio中,我不想提交我的Debug文件夹,但它中有dll文件,如果我移动它,项目将无法编译
In Visual Studio, I don't want to commit my Debug folder, but it has the dll file in it, and if I move it project won't compile
我该怎么办?
基本上,我想提交我的Visual Studio 2012项目,但其中有一个Debug文件夹,我们传统上不会提交。唯一的问题是Debug文件夹中有项目的dll,如果我将dll移动到文件夹的父文件夹,项目将不再编译。
结构如下:
项目文件夹>MSVC_2012>调试文件夹、sln文件等
在调试文件夹中是dll。如何将其从Debug文件夹移到MSVC_2012?
您的问题在细节上并不完全清楚,但这里有一些选项(以及您可以改进问题的方法):
-
您的问题看起来像XY问题。你说"如果我把dll移到文件夹的父级,项目就不再编译了。">在这种情况下,真正的问题是它为什么不编译。我们需要更多的细节来找出原因。你还需要更清楚你所说的"如果我移动dll"是什么意思——你不能在编译dll之前"移动"它,如果你在编译之后移动它,那么根据定义,编译是有效的,所以实际上你的陈述是没有意义的。无论如何,您可能应该专注于修复损坏的构建,而不是为了满足版本控制的需要而对其进行篡改。
-
您尚未指定DLL文件在Debug文件夹中出现问题的原因。我认为这是因为你想将其提交给你的VCS(你没有明确表示这是你的目标)。在这种情况下,您是否意识到提交代码的二进制输出是不正常的做法?因此,一个解决方案可能是重新考虑为什么要首先提交DLL。
-
您没有指定正在使用的VCS。在Git中(我认为在大多数其他VCS中),与整个文件夹相比,您可以对从提交中排除的内容进行更精细的控制。因此,另一个选项是将VCS配置为忽略Debug文件夹,其中包含的任何DLL文件除外
-
您可以更改MSVC在
Configuration Properties -> General -> Output Directory
下的项目属性页中放置DLL文件的位置。这大概就是你提到"移动"DLL时的意思吧? -
最后,根据其他人对您问题的评论,如果您希望DLL同时位于这两个位置,您可以使用构建后步骤将其复制到相关位置。要实现这一点,请转到
Configuration Properties -> Build Events -> Post-Build Event
下的项目属性页,然后输入相关命令(与在命令提示符下键入的命令相同)来进行复制,例如copy myfile.dll ..
,或者正如Alex Farber建议的那样,使用VS宏以更通用的方式指定位置。有关可以插入到命令中的可用宏的列表,请参见此页。这应该被视为最后的解决方案,原因有两个——(a)这是一种黑客攻击,因为当你应该从根本上解决问题时,你正在冗余地复制二进制输出,以避免版本控制和/或生成中的缺陷;(b)生成事件在Visual Studio中有一个严重的缺陷,那就是它们不允许继承值。这使它们成为大型项目中的维护噩梦。
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 如果需要转换,我可以在读取参数的同时将其移动到另一个参数吗?
- 如果这不是类的"复制构造函数",是否可以移动对象?
- 使用 std::move 将参数传递给函数,如果该参数声明为按值传递或使用移动操作数 &&,是否有区别?
- 如果没有带有函数签名的 rvalue 参数,是否会执行 C++ 11 中的移动语义?
- 如果您向前移动,如何更改屏幕,如果向后移动,如何看到较旧的东西?
- boost multi_index - 如果元素类型仅支持移动语义,如何遍历它?
- 如果唯一指针是捕获的值,为什么它不能在 lambda 内移动?
- 如果我们有 (N)RVO,当实际调用移动构造函数时?
- 如果我尝试将对话框从一个项目移动到另一个项目,我是否需要从 rc 文件中复制 DESIGNINFO、对话框信息和AFX_
- 什么是使类不可移动的用例(如果有的话)
- 如果将功能的非常简单的定义移动到.cpp,则编译时间的减少是多少
- 如果我们可以将特定数组元件增加/减少1,则最小总移动到平衡阵列
- 如果我移动一个值进行注册和编辑,它将有所作为
- 如果我默认复制构造函数,将生成构造函数和移动分配
- 在Visual Studio中,我不想提交我的Debug文件夹,但它中有dll文件,如果我移动它,项目将无法编译
- 如果 std::string 从未被修改,它可以在创建后移动吗?
- 如果成员具有非平凡的noexcept赋值运算符,则默认的移动赋值不能显式为noexcept
- 如果在没有move构造函数的情况下移动对象,会发生什么
- 如果我们只定义复制构造函数/oper=,为什么移动构造函数/move赋值没有隐式声明和定义为删除