为什么VS2005会在不进行任何更改的情况下继续签出要编辑的项目?

时间:2020-03-06 14:26:03  来源:igfitidea点击:

我有一个VS2005解决方案,其中包含各种项目(C ++ DLL,C ++静态库,Cassemblies,C ++ Windows可执行文件),这些项目以各种方式组合在一起以生成多个可执行文件。由于某种原因,每次我打开解决方案时,VS2005都希望签出其中一个项目进行编辑。该项目未进行任何修改,仅已签出。如果我将VS2005配置为在签出之前提示,则可以取消加载过程中的自动签出,不会产生不良影响。它可能相关,也可能无关,但它不断检查的项目是cppunit版本1.12.0(静态lib版本)。如何停止这种烦人的行为?

其他可能相关(或者不相关)的详细信息:

  • 源代码控制是Team Foundation Server(不是Visual SourceSafe)
  • 没有签入.suo或者.ncb文件
  • .vcproj和.vspscc文件正在签出
  • 关闭解决方案或者关闭Visual Studio时,系统会询问我是否要保存对项目的更改。回答"是"不会更改文件(Kdiff3将我的本地文件与服务器版本进行比较,并报告"文件等于二进制")
  • 尝试检入"已修改"的文件会导致Visual Studio消息显示"没有要检入的更改。所有更改都是未修改的文件或者锁。更改已被服务器撤消"

解决方案

我们是否已将.suo或者.ncb文件放入源代码管理中?

我们是否尝试过在VS2005签出cppunit之后关闭VS2005,然后查看是否进行了任何更改?

在Web App解决方案中,我经常遇到这样的情况,直到我们关闭Studio并重新打开它,项目文件才真正被保存。

为了清楚起见,我假设意思是Visual SourceSafe2005而不是Visual Studio引起了问题。 (仅供参考,Visual SourceSafe通常缩写为VSS。)

我以前在VSS上遇到过此问题。我认为该限制对于Visual SourceSafe来说确实是根本的:它并不是产品的优点,如果我们可以做出决定,那么我将转向其他。

如果我们可以移至其他地方,建议为中小型项目使用Subversion。它是免费的,并且不使用Visual SourceSafe默认使用的悲观锁定机制。有一个称为VisualSVN的出色Visual Studio插件,它将为我们提供与VSS开箱即用的IDE中相同的功能(查看已更改的文件等)。

如果我们不能更改源代码管理系统,我相信Visual SourceSafe可以使用一种称为"非排他性签出"的模式,或者类似的模式,它使用Subversion和其他源代码管理系统使用的乐观锁定。尝试至少为显然没有更改的文件设置该选项,然后查看是否可以解决问题。

当解决方案中的一个项目的源代码管理信息的路径信息与工作站上的源代码管理信息不同时,我会收到很多建议。 VS打开项目时,它将自动尝试检出有问题的项目,然后

要解决此问题,最好让使用该项目的每个人都删除其本地副本,并执行"获取最新版本..."以获取源代码控制数据库中的内容。

我们还可以检查.sln文件,并在GlobalScxtion(SourceCodeControl)区域中查找每个项目的信息,并通过手动更改此文件(与执行"获取最新的"版本..."对于使用该解决方案的其他开发人员也很可能会引起问题。

当项目第一次加载时,cppunit项目可能会自动创建一个或者多个其他文件,然后将这些文件添加到项目中。否则,将在加载时更改或者增加项目的属性之一。

如果继续进行项目签入,那么下次加载项目时会再次将其自身签出吗?还是在一段时间内对其进行修复以解决问题?

通常,这种行为是由VS尝试更新源代码控制绑定引起的。

Graeme是正确的,在关闭VS之前,VS不会保存项目或者解决方案文件。

我会让VS签出文件,然后关闭VS,然后比较它们。

正如Charles和Graeme所暗示的那样,即使我们不直接对项目进行更改,Visual Studio也会不断对用户选项文件等进行更改。

我不确定要存储什么信息,但是我知道它会发生。常见的补救措施是不包括* .suo文件。我也没有在酱汁控制中的bin或者obj文件夹中存储任何内容,因为这可能与我们谈论的内容(如果我们构建)具有相似的效果。 (在构建时检查项目。认为这样做确实会发生)。

总体而言,这是不可避免的。这就是VS2005、2008的工作方式。

这回答了你的问题了吗?

问候,
坦率

我遇到导致此行为的两个原因。

首先是旧的源代码控制绑定。如果我们有一个以前由另一个源代码管理工具管理的项目,则该项目文件中可能有剩余的绑定。打开项目文件,然后从类似以下的位置更改以下设置:

  • SccProjectName =" $ / Team / Platform / Projects / MyProject"
  • SccAuxPath =" http://teamFoundationServer.example.com:8080"
  • SccLocalPath ="。"
  • SccProvider =" {88888888-4444-4444-4444-BBBBBBBBBBBB}}"

对此:

  • SccProjectName =" SAK"
  • SccAuxPath =" SAK"
  • SccLocalPath =" SAK"
  • SccProvider =" SAK"

不同的项目类型以不同的方式定义。上面的示例来自.vcproj,Cprojects是XML,VB看起来像其他东西,但是含义是相同的。只需将所有四个值设置为常量字符串" SAK",Visual Studio将自动处理源代码控制。有关详细信息,请参见Alin Constantin的博客。

我还没有发现其他原因的根源,但是给我带来麻烦的项目也是CppUnit 1.12.0!我将继续挖掘并发布我的发现。

约翰