C 解析 sln 檔案

2021-07-27 01:35:09 字數 2713 閱讀 4366

我的專案,編碼工具 需要檢測開啟乙個工程,獲取所有專案。

但是發現原來的方法,如果存在資料夾,把專案放在資料夾中,那麼是無法獲得專案,於是我就找了乙個方法去獲得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檔案編譯不...