使用Perforce源代码控制更改VS2010中的绑定根

时间:2012-08-20 13:23:14

标签: visual-studio-2010 version-control perforce

我已经彻底阅读了这篇文章:How does Visual Studio's source control integration work with Perforce?并且发现它非常有用。但是,我有一个特定的问题阻止我在VS中使用Perforce。

在大多数情况下,我对插件没有任何抱怨(我仍在使用P4VSCC插件,因为新插件需要整个团队进行转换,此时此时无法进行转换)。一旦我理解了这些特性,我只使用插件时遇到了一个问题。

我们的解决方案包含许多内置于单个部署包中的项目。因此,每个组件的版本都相同。为了适应这个和其他常见方面,我们定义了一个通用的“SharedVersionInfo.cs”文件,其中包含通常在AssemblyInfo.cs文件中找到的AssemblyVersion和AssemblyFileVersion属性。此文件存储在解决方案文件夹下的Assets文件夹中,并作为链接文件添加到每个项目的Properties文件夹中。从版本管理的角度来看,这非常有用,因为我们只需要在一个地方更改版本并更新所有程序集。但是,当新开发人员首次打开解决方案或添加新项目时,Perforce会遇到此问题。我们目前唯一的补救方法是删除所有链接文件(此解决方案中每个项目有3个),将项目绑定到源代码控制,然后重新添加链接文件。

当我们添加一个新项目但解决方案包含80个项目(并且正在计数)时,这不是什么大问题,所以对于新开发人员来说这不是一个可行的补救措施!

我的理解是,问题与VS认为每个项目的绑定根位置有关。经过一些研究,我被引导找到MSSCCPRJ.SCC文件用于项目的位置。我发现在整个解决方案结构中散布着许多SCC文件。所以......

第一个问题:为什么我的解决方案结构中有多个MSSCCPRJ.SCC文件?

我们还在我们的解决方案中使用了几个共享/共同项目。这导致以下文件夹结构:

/Source
    /CommonTools
        /ProjectA
            ProjectA.csproj
        /ProjectB
            ProjectB.csproj
    /MySolution
        /Assets
            SharedVersionInfo.cs
        /Project1
            Project1.csproj
        /Project2
            Project2.csproj
        :
        /ProjectZ
            ProjectZ.csproj
        MySolution.sln

ProjectA和ProjectB都是MySolution.sln的一部分

第二个问题:如何设置绑定,以便将/ Source文件夹视为根?这将确保解决方案中包含的所有项目都在相同的绑定根下。 Perforce认为这个文件夹是根目录,我如何让VS和插件做同样的事情?

1 个答案:

答案 0 :(得分:0)

由于没有其他人提供解决方案,我认为我会跟踪我自己的调查结果,以便其他任何人遇到这个问题。

首先,我仍然不知道为什么Visual Studio会创建多个MSSCCPRJ.SCC文件,但这些是为解决方案建立“绑定根”的关键。至关重要的是,此文件存在于必要的最高级别,以便解决方案中的所有项目都位于相对于此文件位置的子文件夹中。在上面的示例中,MSSCCPRJ.SCC需要位于/ Source文件夹中。将项目从/ CommonTools添加到解决方案中时,将它放在/ MySolution文件夹中会导致原始问题。

尽管如此,解决这个问题并非易事。我不得不在记事本中手动编辑.sln和所有.csproj文件。我发现一些.csproj文件具有以下标识源控件设置的元素:

<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>

我不知道SAK代表什么,但我的理解是告诉Visual Studio使用.sln文件中包含的绑定信息。

我必须将这些更改为:

<SccProjectName>Perforce Project</SccProjectName>
<SccLocalPath>..\..</SccLocalPath>
<SccAuxPath />
<SccProvider>MSSCCI:Perforce SCM</SccProvider>

其中SccLocalPath值是从.csproj文件到MSSCCPRJ.SCC文件的相对路径。

我还必须为.sln文件中的每个项目更改SccLocalPathX和SccProjectFilePathRelativizedFromConnectionX语句。 SccLocalPathX值应该是从.sln文件到MSSCCPRJ.SCC文件的相对路径 - 如果在同一文件夹中,则为点(。)。 SccProjectFilePathRelativizedFromConnectionX应该是从绑定根到.csproj文件的相对路径。

我希望我可以说有了这个,我从来不必重复这些步骤。不幸的是,每次我向解决方案添加新项目时,我仍然需要进行更正。 Visual Studio仍然希望对.csproj文件中的元素使用SAK,有时.sln文件中的值不太正确。

但是,至少我知道要寻找什么,以及为实现我的目标需要做些什么。如果其他人有更好的解决方案或配置VS和/或Perforce的方法,那么这些设置是在前面正确创建的,我很乐意给予肯定。

希望有帮助...