2011-04-12 57 views
24

我正在使用文本編輯器手動編輯我的* .sln文件。我感到困惑的下面幾行:關於Visual Studio * .sln文件格式的問題

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test2008", "Tools\Test2008\Test2008\Test2008.csproj", "{00B5EBB2-FDA5-4B23-BDC5-27E9F82E7C69}" 
    ProjectSection(ProjectDependencies) = postProject 
     {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8} = {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8} 
    EndProjectSection 
EndProject 

什麼是這個

{82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8} = {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8}

聲明?它看起來完全是多餘的。

+7

如果你拿出來會發生什麼? – 2011-04-12 03:14:59

回答

10

看來,這多餘的語法是的MSBuild認識到項目的依賴關係所需的怪癖之一:

看來,Visual Studio中保持 的依賴有兩種方式,只有一個 其中讀由MSBuild。我看到 ,因爲我仍然可以在GUI中指定 依賴關係,將解決方案複製到 其他機器並使用VS以 正確的順序構建它。 - Victor Sergienko

至於爲什麼需要這種「多餘的方程聲明」,似乎分配項目的GUID給自己的GUID是用的MSBuild 4.0的問題而導致的MSBuild不解決方法識別或響應解決方案(.sln)文件中列出的某些項目依賴項,或者不按順序構建依賴項。

你所問的搞砸的「{x} = {x}」語法是用於引用項目的標準MSBuild語法的變體(例如@Sergio的答案)。

顯然,將一個ProjectSection塊中的依賴聲明嵌入到一個自命名的依賴項GUID中會導致MSBuild更改依賴項目的構建順序,但實際上並未向其添加其他引用。

有一個discussion on Microsoft Connect其中討論此解決方法。在這裏面,丹微軟建議在他的頁面上的第二個留言本的MSBuild毛刺一個更清潔的解決方法,並且還提到你問如何修正:

這正好解決了排序,因爲現在LibraryProject將等待CodeGeneratingProject,但其構建不會受到影響。我可以通過刪除的解決方案文件的依賴性,以及整理 - 刪除這些線,現在沒有必要:

ProjectSection(ProjectDependencies) = postProject 
    {B79CE0B0-565B-4BC5-8D28-8463A05F0EDC} = {B79CE0B0-565B-4BC5-8D28-8463A05F0EDC} 
EndProjectSection 

,它仍然能正常工作。

6

MSDN

本聲明包含獨特 項目GUID和項目類型 GUID。 環境使用此信息來查找項目文件 或屬於解決方案的文件, 和每個 項目所需的VSPackage。

GUID傳遞給 IVsProjectFactory加載特定 VSPackage的項目相關的項目,然後 該項目由 VSPackage的加載。在這種情況下,爲此項目加載的VSPackage 是 Visual Basic。

例如:

項目( 「{F184B08F-C81C-45F6-A57F-5ABD9991F28F}」) = 「PROJECT1」, 「Project1.vbproj」,「{8CDD8387-B905-44A8 -B5D5-07BB50E05BEA}」 EndProject

+0

感謝您的回覆但我理解您的示例中的陳述。令我困惑的是** ProjectSection **中多餘的公式語句。 – smwikipedia 2011-04-12 03:40:44

+0

+1爲MSDN參考 – Mitch 2012-12-15 21:30:17

22

{82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8} = {82B9BEC0-C9CC-4423-B54F-61E3C4AF53D8}行表示Test2008項目已聲明的依賴上項目(通過VStudio項目依賴關係對話框中設置)與唯一標識符82B9BEC0-C9CC-4423- B54F-61E3C4AF53D8。您應該能夠在同一個.sln文件中找到具有相同標識符的項目。至於爲什麼這條線的奇怪語法,我沒有.sln文件格式的內幕知識。但是,基於對.sln文件中其他ProjectSection提取的觀察,我不得不猜測,Visual Studio使用的.sln解析器歷來假定ProjectSection行將採用key = value格式,並且在任何給定部分內都強制執行密鑰唯一性。我也猜測那些實現了項目依賴性功能的人決定,不要使用解析器,因爲使用projectId = projectId作爲他們的分區線會更簡單,因爲這些鍵對他們來說是沒有意義的,但是如果他們保證是唯一的否則強制執行只有一個從項目A到項目B的依賴關係。

+0

這正是我所尋找的信息,它是在解決方案文件中配置此信息的「Project Dependencies」對話框。似乎有點棘手,因爲「Project References」也可以添加複選框以在此對話框中進行檢查,但是您不會找到相應的「ProjectSection(ProjectDependencies)」條目。看起來我剛剛發現我們的團隊在Visual Studio中使用了項目依賴項/引用項的混合。需要轉換爲僅使用項目引用。 – jxramos 2016-09-08 19:00:15

1

ProjectSection(ProjectDependencies) = postProject之後的行 指定依賴項列表 - 哪個項目取決於哪個依賴項。 (可以在Solution> Properties> Project Dependencies中看到)。

如果你想「解密」更裏面是什麼發生了,看看以下項目:

https://sourceforge.net/p/syncproj/code/HEAD/tree/

下面是的.sln解析器,你可以檢查Solution.cs,搜索「ProjectDependencies 」。

鍵值總是相同,這是某種文件格式問題。

+0

謝謝。我會看看那個。我從不期望可以爲此生成語法分析器。 – smwikipedia 2017-02-04 23:35:09

相關問題