我的專案,編碼工具 需要檢測開啟乙個工程,獲取所有專案。
但是發現原來的方法,如果存在資料夾,把專案放在資料夾中,那麼是無法獲得專案,於是我就找了乙個方法去獲得sln檔案的所有專案。
原先使用的方法dte.solution.projects
但是放在資料夾的專案獲取不到,所以使用堆疊提供的方法。
首先新增引用microsoft.build
注意版本
然後把我三個類放到專案,其實放兩個就好了,具體參見我的github
public
class solution
}public listprojects
public listconfigurations
public
solution(string solutionfilename)
var solutionparser = s_solutionparser.getconstructors(bindingflags.instance | bindingflags.nonpublic).first().invoke(null);
using (var streamreader = new streamreader(solutionfilename))
var projects = new list();
var array = (array)s_solutionparser_projects.getvalue(solutionparser, null);
for (int i = 0; i < array.length; i++)
this.projects = projects;
getprojectfullname(solutionfilename);
//object cfgarray = //s_solutionparser_configurations.getvalue
// s_solutionparser_projects.getvalue(solutionparser, null);
//propertyinfo pinfos = null;
//pinfos = cfgarray.gettype().getproperties();
//int count = (int)pinfos[1].getvalue(cfgarray, null);
//var configs = new list();
//for (int i = 0; i < count; i++)
//)));
//} = configs;
}private
void
getprojectfullname(string solutionfilename)
}private
void
getprojectfullname(directoryinfo solution, solutionproject project)
}[debuggerdisplay(", , ")]
public
class solutionproject
}public
string projectname
public
string relativepath
public
string projectguid
public
string projecttype
public
string fullname
public
solutionproject(object solutionproject)
}public
class solutionconfiguration
}public
string configurationname
public
string fullname
public
string platformname
public
solutionconfiguration(object solutionconfiguration)
}
注意要引用
using system;
using system.collections.generic;
using system.diagnostics;
using system.io;
using system.linq;
using system.reflection;
稍微說下上面**,主要用的是反射。
用反射獲得解析 sln 的s_solutionparser_parsesolution
他可以獲得所有專案。
但是獲得的專案路徑是相對的,於是使用c# 相對路徑轉絕對路徑,可以轉換專案路徑。
輸入工程檔名就好,輸入工程名,會自動獲得所有專案。
solution solution =new solution(工程檔案路徑);
獲得工程檔案的所有專案
foreach (var temp in solution.projects)
**:
參見:
VS中的sln檔案
我們在應用vc6以前,發現的是dsp和.dsw檔案,開啟dsw檔案可以開啟整個工程 vs.net2002以後是.vcproj和.sln sln對應以前的.dsw vcproj對應以前的.dsp vcproj是工程檔案,sln是解決方案檔案。乙個解決方案裡面可以包含多個工程。開啟vcproj檔案編譯不...
關於 sln和 suo檔案
sln 和 suo都是是解決方案檔案。sln visual studio.solution 它通過為環境提供對專案 專案項和解決方案項在磁碟上位置的引用,可將它們組織到解決方案中。包含了較為通用的資訊,包括解決方案所包含專案的列表,解決方案內任何項的位置以及解決方案的生成配置。比如是生成debug模...
關於VS中的sln檔案
我們在應用vc6以前,發現的是dsp和.dsw檔案,開啟dsw檔案可以開啟整個工程 vs.net2002以後是.vcproj和.sln sln對應以前的.dsw vcproj對應以前的.dsp vcproj是工程檔案,sln是解決方案檔案。乙個解決方案裡面可以包含多個工程。開啟vcproj檔案編譯不...