3

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

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

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

8 回答 8

1

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

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

总体来说是无法避免的。这就是 VS2005、2008 的工作方式。

这回答了你的问题了吗?

问候, 弗兰克

于 2008-09-19T14:13:18.673 回答
0

您是否将 .suo 或 .ncb 文件放入源代码控制?

于 2008-09-19T14:06:19.047 回答
0

您是否尝试在检查 cppunit 后关闭 VS2005,然后查看是否进行了任何更改?

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

于 2008-09-19T14:07:40.387 回答
0

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

我以前用 VSS 遇到过这个问题。我认为限制是 Visual SourceSafe 的根本:它只是不是一个好的产品,如果它是一个你可以影响的决定,我会转向其他东西。

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

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

于 2008-09-19T14:08:45.360 回答
0

当解决方案中的一个项目具有源代码控制信息以及路径信息与您的工作站上的源代码控制不同时,我得到了很多。当 VS 打开项目时,它会自动尝试检查有问题的项目并

要修复它,您最好让使用该项目的每个人都删除他们的本地副本并执行“获取最新版本...”以获取源代码控制数据库中的内容。

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

于 2008-09-19T14:09:46.857 回答
0

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

如果您继续签入项目,下次加载它时是否会再次签出?或者检查它是否可以解决一段时间的问题?

于 2008-09-19T14:09:50.163 回答
0

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

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

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

于 2008-09-19T14:11:33.560 回答
0

我遇到了导致这种行为的两个原因。

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

  • 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,C#项目是XML,VB看起来像别的东西,但意思是一样的。只需将所有四个值设置为常量字符串“SAK”,Visual Studio 就会自动处理源代码控制。有关详细信息,请参阅Alin Constantin 的博客

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

约翰

于 2009-04-30T23:10:56.207 回答