1. 程式人生 > >VS解決方案檔案格式說明

VS解決方案檔案格式說明

作者:朱金燦

       VS解決方案檔案本質是一個檔案檔案,這個用記事本或者Node++之類的文字編輯軟體開啟一個VS解決方案檔案就知道了。瞭解了這一點,我們知道使用c語言的檔案操作函式就能讀取VS解決方案檔案了。下面是一個簡單的讀取函式:

#include "stdafx.h"
#include <tchar.h>
#include <string>

int _tmain(int argc, _TCHAR* argv[])
{
	std::wstring strSlnFile = _T("G:\\dev-utility-tools\\src\\dev-utility-tools.sln");
	FILE* fp;
	TCHAR szBuff[3*_MAX_PATH];// 設定讀取緩衝區為*260

	if( (fp = _tfopen(strSlnFile.c_str(),_T("r"))) != NULL )
	{
		memset(szBuff,'\0',_MAX_PATH*3*sizeof(TCHAR));
		while(_fgetts( szBuff,_MAX_PATH*3*sizeof(TCHAR), fp ) )
		{
             _tprintf(_T("%s"),szBuff);
		}
    }
	getchar();
	return 0;
}

          上述程式碼實現讀取的是vs2008的解決方案檔案,在win7旗艦版,vs 2008+sp1執行成功,效果圖如下:

        現在我們分析vs2008的解決方案檔案儲存的是什麼資訊?使用文字工具進行分析可以推斷,我初步判斷vs2008的解決方案檔案可以劃分為三部分:

第一部分為解決方案檔案說明,第二部分為工程檔案說明,以第一個Project開始,第三部分為工程平臺設定,以Global開始,以EndGlobal結束。下面逐一作具體說明:

        一個空的解決方案檔案(即不包含任何工程)只有第一和第三部分,具體如下:

Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
Global
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal

第一部分一般只有三行

第一行為空行

第二行為VS解決方案檔案格式的版本說明,

如VS2008MicrosoftVisual Studio Solution File, Format Version 10.00

第三行為上一行的VS版本註釋,如# Visual Studio 2008,可推斷VS2005對應的解決方案檔案版本為9.00

第二部分為工程說明,這裡的工程分為原始碼工程和虛擬資料夾。

單個工程說明的格式為

Project("{工程型別標識}") = "工程名", "工程檔案相對解決方案檔案的位置", "{工程標識}"

               ProjectSection(ProjectDependencies)= postProject  # 所依賴的工程

所依賴工程1的標識 =所依賴工程1的標識

               EndProjectSection

EndProject

     若無依賴工程,則無ProjectSection(ProjectDependencies) = postProject這個部分。

      在VS2008中,原始碼工程的標識為8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942,虛擬資料夾的標識為2150E333-8FDC-42A3-9474-1A3956D46DE8,貌似都是GUID。虛擬資料夾並無對應的工程檔案,因此在位置一項中取其名字。

第三部分為工程平臺設定。這裡的工程平臺設定分為兩部分,一是解決方案配置,二是對應的解決方案平臺,具體如下圖:

       從上圖可知,所有的工程配置數等於解決方案配置數乘以解決方案平臺。

這部分的具體說明如下:

Global  # 開始符
    # 列出解決方案所有的配置數
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Win32 = Debug|Win32
		Release|Win32 = Release|Win32
	EndGlobalSection
#指定每個工程的具體配置
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{01EA6707-BDD4-4074-A5F0-CBCEB660E094}.Debug|Win32.ActiveCfg = Debug|Win32
		{01EA6707-BDD4-4074-A5F0-CBCEB660E094}.Debug|Win32.Build.0 = Debug|Win32
		{01EA6707-BDD4-4074-A5F0-CBCEB660E094}.Release|Win32.ActiveCfg = Release|Win32
		{01EA6707-BDD4-4074-A5F0-CBCEB660E094}.Release|Win32.Build.0 = Release|Win32
		{CC14F446-E0CF-4296-B4F4-F712D6B4DC45}.Debug|Win32.ActiveCfg = Debug|Win32
		{CC14F446-E0CF-4296-B4F4-F712D6B4DC45}.Debug|Win32.Build.0 = Debug|Win32
		{CC14F446-E0CF-4296-B4F4-F712D6B4DC45}.Release|Win32.ActiveCfg = Release|Win32
		{CC14F446-E0CF-4296-B4F4-F712D6B4DC45}.Release|Win32.Build.0 = Release|Win32
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
EndGlobal   # 結束符


          上面值得注意的是每一種設定都分為ActiveCfg和Build.0兩種。


相關推薦

VS解決方案檔案格式說明

作者:朱金燦       VS解決方案檔案本質是一個檔案檔案,這個用記事本或者Node++之類的文字編輯軟體開啟一個VS解決方案檔案就知道了。瞭解了這一點,我們知道使用c語言的檔案操作函式就能讀取VS解

解決方案VS解決方案中出現無法生成DLL檔案

前言: 這幾天在學習牛腩新聞釋出系統,突然發現標準的過程原來是從D層倒著往U層敲,在敲的過程中,遇到了一個問題:D層生成的DLL檔案,在B層和U層中使用不了! 從早上10:00~15:30,自己弄了好久沒弄出來,在趙雨田的幫助下,一下子就發現了問題! 問題的

VS 解決方案文件結構分析

nbsp 項目文件 需要 管理器 TTT lease new projects build VS2013 解決方案文件結構分析 Visual Studio 的解決方案文件是一個文本文件,其中的內容不是太復雜,有些時候 Visual Studio 會把這個文件搞亂,理解一下

docker~docker-compose和VS解決方案的關系

有時 文件組 version services 程序 出現 支持 web項目 spa 回到目錄 一般地,我們在VS裏添加了一個解決方案之後,會更新模塊或者業務添加多個api,web項目,這類似於最近說的微服務,而我們的docker-compose與微軟件正好有了一種默契,

Vs 解決方案中多專案引用問題

如圖,專案PAC為啟動專案,是WIN32 application,專案AEDLL為WIN32 控制檯程式(就是執行時黑框的),它是個採集程式。目的:專案PAC起到軟體介面的作用,我想把專案AEDLL採集的資料呼叫到專案PAC中,請問可以實現嗎?怎麼樣在PAC中使用AE

VS解決方案配置

首先,我們一般不會修改解決方案的屬性,而是設定每個專案各自的屬性. 接著上一篇文章,我們來看看我們應該怎樣來設定各專案的專案屬性更好: 我們以NYOJ_001專案的Debug版的設定為例: 在常規選項裡,我們一般會設定輸出目錄(即生成.exe檔案的目錄),中間目錄(即中間檔案的目錄)。當

應用程式框架實戰三十八:專案示例VS解決方案的建立(一)

  進行專案開發的第一步,是創建出適合自己團隊習慣的VS解決方案,雖然我已經提供了專案示例,但畢竟是我建立的,你直接使用可能並不合適,另外你如果嘗試模仿重新建立該示例,中間可能碰到各種障礙,特別是專案間的依賴關係。   本文的目的是幫助.Net架構初學者能順利搭建起適合自己的VS解決方案,我會在本文演示曾經

docker~docker-compose和VS解決方案的關係

回到目錄 一般地,我們在VS裡添加了一個解決方案之後,會更新模組或者業務新增多個api,web專案,這類似於最近說的微服務,而我們的docker-compose與微軟體正好有了一種默契,當你為你的解決方案新增docker支援之後,你會發布有個docker-compose出現了,它會把所有可以釋出的專案都整合

Visual Studio vs解決方案sln版本升級/高低版本轉換工具

EasyDarwin各開源專案目前只提供Visual Studio 2008的解決方案檔案,我們使用Visual Studio 版本互轉工具給使用者提供更多的Visual Studio版本選擇。使用方法如下: 開啟轉換工具 點選瀏覽,選擇需要轉換的解決方

vs解決方案目錄結構設定

轉載網址:http://www.cnblogs.com/zuibunan/p/3843459.html 涉及到的配置: 專案編譯時使用的中間目錄; 專案連結的輸出目錄; 專案編譯結束後,拷貝生成的 dll 和 lib 到指定目錄; 專案編譯結束後,拷貝需要的 dll 到輸出

vs解決方案,將現有的工程引入到該解決方案

首先將現有的工程 到解決方案 檢視,右鍵該解決方案,選中增加現有工程, 一般會彈出 未找到專案檔案,請確認該檔案是否存在, 開啟該工程的vcproj檔案,用ue等,找到不存在的檔案,將其刪除, 重啟vs,重新新增現有工程到解決方案中,即可,

VS無法開啟專案檔案“Web.csproj” -此安裝不支援該專案型別問題解決方案

今天開啟一個Asp.net mvc專案vs報錯,提示“此安裝不支援該專案型別”,如下圖: 有人說是沒有安裝VS sp1,我記得我裝過的,我再確認了下,已經安裝了,如下圖: 我看了下專案檔案“c

VS未能正確載入解決方案中的一個或多個專案,無法讀取專案檔案“XXXX.vcxproj”解決方法

錯誤提示:點選確定後提示:問題原因:OpenCV路徑無法讀取導致無法正常載入檔案解決方案:使用記事本或文字編輯器開啟“XXXX.vcxproj”檔案,刪除OpenCV路徑,正常進入工程後重新配置OpenCV環境

VS生成的winform專案各個檔案意義和解決方案資源管理器作用

Bin 目錄用來存放編譯的結果,bin是二進位制binrary的英文縮寫,因為最初C編譯的程式檔案都是二進位制檔案,它有Debug和Release兩個版本,分別對應的資料夾為bin/Debug和bin/Release,這個資料夾是預設的輸出路徑,我們可以通過:專案屬性—

java處理excel-xlsx格式檔案解決方案

https://www.cnblogs.com/scw2901/p/4378424.html1、第一次讀取7M左右的ecxel檔案,使用poi 庫實現,參考了下面的博文。   http://www.cnblogs.com/chenfool/p/3632642.html   

未能載入檔案或程式集“****”或它的某一個依賴項。試圖載入格式不正確的程式。解決方案總結

當這個ImageList中沒有影象時編譯也是正常的,但是一旦編譯就會引發這樣的異常。 這個錯誤產生的原因在於,VS2010內部使用的編譯器中,無論是32位還是64位的編譯元件,都是純IL的,也就是在64位系統中是以64位模式執行,這與當前專案使用的平臺設定無關。當編譯的元件引用了一個標記為x86的庫(僅

【轉】使用vs2013開啟VS2015的工程檔案解決方案(適用於大多數vs低版本開啟高版本)

http://www.cnblogs.com/WayneLiu/p/5060277.html前言:重灌系統前我使用的是vs2015(有點裝*),由於使用2015實在在班上太另類了, 導致我想在其他同學的vs下看一看我寫的程式碼都無法達成!而且最關鍵的是交作業的時候,老師的20

springboot搭建檔案預覽解決方案,支援目前主流格式office檔案,txt檔案,png,jpg等圖片以及壓縮檔案的線上預覽功能

前言 這些天在做一個檔案預覽的功能,由於之前沒有這方面的經驗,因此在市面上找了一些這方面的資料,發現目前市面上主流的檔案預覽服務是由幾家廠商提供的,做的比較好的有如永中軟體,officeweb365等,不過你們都懂得,是要收費的,所以即便做的再好,我也只能觀望觀望,然後也百

使用低版本的VS打開高版本項目的解決方案(以VS2008打開VS2010開發的項目為例)

ref tar img 若是 如何 load 分享 項目 targe 使用低版本的VS打開高版本項目的解決方案,這裏以VS2008打開VS2010開發的項目為例。 右鍵項目的sln文件以記事本的方式打開: 將對應的前兩列版本各降到對應的版本,這邊的11.00改為10.00

Spring的Service調用本類方法聲式事務無效的解決方案

{} 解決 ostc oid color wire ont spa 出了 示例: class Test{ public void a(){ b(); } @Transactional pubic void b(){} }