最近遇到这样的一个问题,我将一个C++解决方案(用到opencv库,并添加了属性表)的整个文件夹复制到另外一个路径下面,在用VS2013打开.sln的时候遇到了一些问题。
至于属性表是什么,以及为什么要添加属性表,可以参见我的另一篇博文:http://blog.csdn.net/qq295456059/article/details/50815290
下面是具体的情况:
在遇到这个问题的时候,我先是写了一个最简单的程序进行测试:
1、对于最最普通的情况,我新建一个VS工程,在main.cpp写下如下的代码:
#include<iostream>
using namespace std;
int main()
{
cout << "Hello!I am Li Chenyang!" << endl;
}
成功运行之后,我将整个解决方案的文件夹复制到另外的路径下,并用VS2013打开新路径下的.sln,成功打开,并可以正常编译运行。这说明,在这种情况下,改变解决方案文件夹的路径不影响VS2013对.sln的打开,这个时候,我渐渐意识到,由于使用opencv库而添加的opencv_3.1.props才是真正的“罪魁祸首”!
2、进而,我继续尝试了另外一个简单的程序:
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img;
}
与上面的不同之处在于,这里用到了opencv库,需要对VS2013进行相应的配置,所以我在属性管理器中为项目test2添加了一个现有的属性表opencv_3.1.props,这个现有的属性表里面是一些关于opencv库的配置,具体的可以参考我上面提到的博文。
成功运行之后,我将整个解决方案的文件夹复制到另外的路径下,并用VS2013打开新路径下的.sln,这个时候便出错了:错误如下,
大概的原因是由于在项目中添加了属性表,而改变了路径之后找不到属性表了。
来到这一步,解决方法就很明确了,首先,如果需要改变路径的解决方案中含有新添加的属性表,那么在改变路径之前,先将新添加的属性表移除,然后再赋值文件夹到新的路径,在新路径下打开.sln文件,然后重新为解决方案添加属性表,这样就不会出现找不到属性表的情况了。
虽然这只是我最近遇到的情况,打不开解决方案可能还有其他许多的原因,但还是希望能对朋友们有所帮助!
------------------------------------------------------------------------------------------------
*****************************************************************************
------------------------------------------------------------------------------------------------
补充于2016.9.20
今天再次遇到由于属性表问题而打不开.sln文件的事情,重新回顾了之前的思路,感觉上面写的有一些啰嗦。
上面写了那么多,关键就在于属性表opencv_3.1.props并没有位于test2项目的文件夹下面,如果添加的属性表存在于项目文件夹下面,无论如何复制test2项目文件夹,都可以直接打开.sln。
其实,关于属性表的路径,是以相对路径的形式,记录在与项目同名的.vcxproj(如:test2.vcxproj)文件里面。由于记录的是相对路径,所以如果添加的属性表不在项目文件夹下面的话,更换项目文件夹的路径之后,依照该相对路径显然已经找不到属性表,所以自然就报错了。
最最简单的办法就是直接打开.vcxproj文件,将里面import该属性表的语句去掉,然后就能够打开.sln文件了。
具体参考链接:http://blog.csdn.net/jenny_84/article/details/44673933
当然,要成功编译,还得重新添加属性表。