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

时间:2008-09-19 14:00:36

标签: visual-studio-2005

我有一个VS2005解决方案,它包含各种项目(C ++ DLL,C ++静态库,C#程序集,C ++窗口可执行文件),它们以各种方式组合以生成多个可执行文件。出于某种原因,每次我打开解决方案时,VS2005都想查看其中一个项目进行编辑。项目没有以任何方式修改,只是检查出来。如果我在结账前配置VS2005进行提示,我可以在加载期间取消自动结账,没有任何不良影响,我可以看到。它可能相关也可能不相关,但它一直检查的项目是cppunit版本1.12.0(静态lib版本)。我怎么能阻止这种烦人的行为?

其他可能相关(或不相关)的细节:

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

8 个答案:

答案 0 :(得分:1)

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

我不确定存储了哪些信息,但我确实知道它发生了。常见的补救措施是不包含* .suo文件。我也没有在控制台控件中的bin或obj文件夹中存储任何内容,因为这可能与你所说的(如果你构建)有类似的效果。 (在构建时检查项目。认为这确实需要采取行动)。

总的来说,这是不可避免的。这就是VS2005,2008的工作原理。

这会回答你的问题吗?

此致 弗兰克

答案 1 :(得分:0)

您是否将.suo或.ncb文件放入源代码管理中?

答案 2 :(得分:0)

您是否尝试在检出cppunit之后关闭VS2005,然后查看是否有任何更改?

我经常在Web App解决方案中遇到类似这样的问题,其中项目文件实际上没有保存,直到您关闭工作室并重新打开它。

答案 3 :(得分:0)

只是为了澄清,我假设您的意思是Visual SourceSafe2005导致问题,而不是Visual Studio。 (仅供参考,Visual SourceSafe通常缩写为VSS。)

之前我曾经遇到过VSS这个问题。我认为限制对于Visual SourceSafe来说是非常重要的:它只是产品的好处,如果它是你可以影响的决定,我会转向别的东西。

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

如果您无法更改源代码管理系统,我相信Visual SourceSafe有一种称为“非独占签出”的模式,或类似使用Subversion和其他源代码控制系统使用的乐观锁定的模式。尝试至少为显然没有更改的文件设置该选项,看看是否能解决问题。

答案 4 :(得分:0)

当解决方案中的某个项目的源控制信息与源控制中的路径信息与工作站上的路径信息不同时,我得到了很多。当VS打开项目时,它将自动尝试检出有问题的项目和

要解决这个问题,最好让每个使用该项目的人都删除他们的本地副本,然后“获取最新版本......”来获取源代码管理数据库中的内容。

您还可以检查.sln文件并在GlobalScxtion(SourceCodeControl)区域查找每个项目的信息,并查看相对路径是否不是您在工作站上存储项目的方式 - 尽管手动更改此文件与执行操作“获取最新版本......”更有可能给使用该解决方案的其他开发人员带来问题。

答案 5 :(得分:0)

您的cppunit项目可能在项目首次加载时自动创建一个或多个附加文件,然后将这些文件添加到项目中。或者,项目的某个属性在加载时会被更改或递增。

如果您继续检查项目,下次加载时是否会自动检查?或者检查它是否会解决问题一段时间?

答案 6 :(得分:0)

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

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

我会让VS检查文件,然后关闭VS,然后区分它们。

答案 7 :(得分:0)

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

第一个是旧的源代码控制绑定。如果您有一个曾经由另一个源代码控制工具管理的项目,它可能在项目文件中有剩余的绑定。打开项目文件,并从以下内容更改以下设置:

  • SccProjectName = “$ /团队/平台/项目/ MyProject的”
  • SccAuxPath = “http://teamFoundationServer.example.com:8080”
  • SccLocalPath = “”
  • SccProvider = “{88888888-4444-4444-4444-BBBBBBBBBBBB}”

到此:

  • SccProjectName = “SAK”
  • SccAuxPath = “SAK”
  • SccLocalPath =“SAK”
  • SccProvider = “SAK”

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

我还没有发现另一个原因,但是给我带来麻烦的项目也是CppUnit 1.12.0!我会继续挖掘并发布我的发现。

约翰