2010-11-16 73 views
14

我在一個Visual C++項目團隊中工作。在advice之後,我們得到了我們正在使用SCM跟蹤項目的.sln文件。事實證明,每次我從我的合作伙伴(是的,我們使用git)拉出並在VS中打開解決方案時,.sln文件就會更新。被更新的部分是出現了幾次(在這種情況下,與7C44結束)在以下段長ID:Visual Studio不斷更改project.sln文件

{828CB89E-F092-3B7A-2F8C-62E146587C44}.Debug|Win32.ActiveCfg = Debug|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Debug|Win32.Build.0 = Debug|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.DebugStaticCRT|Win32.ActiveCfg = DebugStaticCRT|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.DebugStaticCRT|Win32.Build.0 = DebugStaticCRT|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Release|Win32.ActiveCfg = Release|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Release|Win32.Build.0 = Release|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.ReleaseStaticCRT|Win32.ActiveCfg = ReleaseStaticCRT|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.ReleaseStaticCRT|Win32.Build.0 = ReleaseStaticCRT|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Template|Win32.ActiveCfg = Template|Win32 
    {828CB89E-F092-3B7A-2F8C-62E146587C44}.Template|Win32.Build.0 = Template|Win32 

是什麼號碼是什麼意思?我們如何讓它停止在我們之間轉變?

+0

數量是一個GUID,我猜是用來表示解決方案中的一個給定的項目。 – 2010-11-16 13:15:53

+1

是的 - 問題是爲什麼GUID每次都會改變? – Arafangion 2010-11-16 13:18:39

+0

GUID(大標識符)用於以獨特的方式標識項目。解決方案中是否有另一個具有相同GUID的項目? – 2010-11-16 13:37:57

回答

9

這是Visual Studio用來引用各個項目的GUID。您將在.sln文件的頂部找到與其定義/導入項目相同的GUID。

Visual Studio從相應的.csproj/.vbproj文件中讀取GUID。在那裏你應該在頂部附近找到一個ProjectGuid屬性和相應的GUID。如果您和您的合作伙伴在此定義了不同的GUID,那麼.sln也會更新。

+0

所以我們可以手動編輯.csproj /。vbproj文件並更改GUID以適應其他的? – Jonathan 2010-11-18 07:13:01

+0

@Jonathan是的,你可以。無論如何,該文件應該在版本控制中。 – 2010-11-18 07:39:17

+3

我看到相同的問題,但這似乎並不適用於我。我對.vcxproj和.sln文件進行了更改,並檢查了所有文件。我試圖通過將完整項目下載到新位置來進行測試。在我打開解決方案文件並且項目混亂的情況下,新位置的GUID發生了變化!我仍然試圖找出如何解決這個問題。我正在使用VS2010 – zar 2013-02-21 21:48:24

5

我有同樣的問題。 我終於注意到它來自未定義其GUID的vcxproj文件。 我手動添加此GUID在我vcxproj文件:

<PropertyGroup Label="Globals"> 
    <ProjectGuid>{D3303AD3-B7E5-48F8-919C-18202ABAEF00}</ProjectGuid> 
    <RootNamespace>MyProject</RootNamespace> 
    <ProjectName>MyProject</ProjectName> 
    <Keyword>MFCProj</Keyword> 
    </PropertyGroup> 
27

我有困難的時候找到的答案搜索時,這個特殊的職位,所以我只是想補充一些關鍵詞和說明,使之更容易找到。感謝Daniel和tgb的精彩回答,我解決了這個問題,打開Visual Studio 2010後我的團隊和解決方案文件不再有衝突(我會投票給他們的答案,但我今天剛加入,還沒有足夠的聲望點投票答案......)。

因此,以更多方式提出問題: 爲什麼Visual Studio在打開解決方案時更改.sln文件爲什麼.sln文件有本地修改?在Visual Studio解決方案文件中導致合併衝突的原因是什麼?

答案:很可能在.vcxproj項目文件中不同或缺少ProjectGuid屬性將導致本地修改。這可能是由於從以前版本的Visual Studio升級項目,或者僅僅是從手動複製項目文件和編輯部分項目文件。

解決方法是添加一行:

<ProjectGuid>{###}</ProjectGuid> 

(由在適當位置###的溶液文件中的相應ID)到.vcxproj文件中的「的PropertyGroup標籤=‘全局’」節點,例如:

<PropertyGroup Label="Globals"> 
    <ProjectGuid>{FD0675C0-EC06-E665-4001-12DEE6694605}</ProjectGuid> 
    <RootNamespace>MyProject</RootNamespace> 
    </PropertyGroup> 

否則Visual Studio將只爲每個項目分配一個新的隨機ProjectGuid並更新.sln文件。該「ProjectGuid」可以很容易地在.sln文件給定的項目中找到:

Project("{<Filter#>}") = "MyProjName", "src\to\Proj.vcxproj", "{<ProjectGuid>}" 
+4

另外我補充說,一個缺失''屬性的可能原因是將項目從VC6轉換爲項目。 – ceztko 2013-08-21 14:08:09

相關問題