10

我想知道是否有办法在 Visual Studio 2008 中调试代码时完全锁定我的代码。作为 64 位应用程序运行时,代码文档会自动锁定,我非常喜欢;但是,我的大部分编码都是为 32 位的 Excel 制作插件。结果是,即使我以“AnyCPU”为目标,VS 主机也知道它在 32 位进程中运行,因此,在 Visual Studio 中运行代码时源代码不会被锁定。

我可以通过转到工具 > 选项 > 调试 > 编辑并继续,然后取消选中“启用编辑并继续”复选框来关闭“编辑并继续”。然而,这并没有完全锁定代码。这确实会阻止在当前运行中执行代码中的任何编辑,但不会阻止鼠标单击或击键实际更改代码。

同样,在使用 64 位应用程序时不会发生这种情况——代码被完全锁定。我非常喜欢将代码完全锁定,至少有两个原因:

  1. 我可能会在调试时不小心按到某个键或类似的东西,我绝对不想这样做。这很少见,但这是一个问题。

  2. 我的许多自动化测试通过 SendKeys 驱动用户界面。但是,当使用调试器逐步完成此类测试时,我有时会忘记某些方面涉及 SendKeys,这意味着击键最终会发送到 Visual Studio IDE 而不是 Excel。

在上面的问题 #2 中,单元测试失败了,这很好——我的错——但是将所有击键发送到代码模块并破坏我的代码是完全不可接受的。

有人在这里有什么想法吗?在针对 32 位 CPU 编译时,在 Visual Studio 中运行托管时,可以完全锁定代码吗?

关于这个问题的一些相关帖子,但没有一个直接解决这个问题:

在此先感谢您的任何帮助或想法...

麦克风

4

3 回答 3

5

这是我在 Visual Studio 2005 下使用的一个技巧(没有机会在 Visual Studio 2008 下进行测试,但它应该可以工作):

  • 打开可执行程序集的属性
  • 转到调试选项卡
  • 选中启用非托管代码调试复选框

代码文档应保持锁定状态,即使遇到断点也是如此,并且任何更改它的尝试都应触发一个弹出窗口,提示“启用非托管调试时不允许更改”

于 2010-01-18T13:12:28.713 回答
4

嘿,抱歉,我无法帮助您完全锁定您的代码-我有相反的愿望:在调试期间完全解锁它,但我可以帮助您解决第二个问题。

我建议您考虑在发送任何键之前检查活动窗口,如果活动窗口不是您的目标站点,请暂停执行测试,直到该窗口返回焦点。

我知道这不是您想要的解决方案,但防止其他类似问题可能不会有什么坏处。

祝你好运!

亚当

于 2010-01-12T22:20:23.443 回答
3

这是我能想到的最好的。它有效,但您可能不想采取一些步骤。

本质上,该技术是在运行应用程序时将项目文件设置为只读,然后在应用程序结束时将它们设置回可写。

但是,在 VS2k8 中,默认情况下,将文件设置为只读仍然允许您编辑文件。您需要先在工具 > 选项 > 环境 > 文档中关闭“允许编辑只读文件...”设置。

其次,您需要将以下键作为 DWORD 添加到注册表并将其值设置为 1:

HKCU\Sofware\Microsoft\Visual Studio\9.0\Source Control\UncontrolledInMemoryEditDialogSuppressed  

仍然无法完全奏效。然后您需要做的是将该项目的源代码控制设置为 Visual Source Safe。(<--这是我假设您不喜欢的步骤。)

然后重启VS2k8。

此时,如果您将其中一个文件设置为只读,您将看到 Visual Studio 根本不允许您编辑此文件。当您尝试时,它会播放您计算机的异常音乐。

现在,要在运行应用程序时使您的文件成为只读文件,请设置一个构建后进程来执行此操作。这很容易。

更难的是,一旦您的应用程序完成运行,就将它们设置回可写状态。最简单的解决方案可能是批处理文件快捷方式。

于 2010-01-16T20:34:35.727 回答