【问题标题】:Change binding root in VS2010 using Perforce source control使用 Perforce 源代码控制更改 VS2010 中的绑定根目录
【发布时间】:2012-09-27 19:52:52
【问题描述】:

我已经彻底阅读了这篇文章: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和插件做同样的事情?

【问题讨论】:

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


    【解决方案1】:

    由于没有其他人提供解决方案,我想我会跟进我自己的发现,以帮助遇到该线程的其他人。

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

    也就是说,解决问题并非易事。我不得不在记事本中手动编辑 .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 的方法,以便预先正确创建这些设置,我很乐意给予赞扬。

    希望对您有所帮助...

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2012-03-06
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多