有没有办法*完全*禁用编辑并继续?

时间:2010-01-12 15:45:38

标签: c# visual-studio-2008 debugging editing edit-and-continue

我想知道在Visual Studio 2008中调试它时是否有办法完全锁定我的代码。代码文件在作为64位应用程序运行时会自动锁定,我更喜欢这些;但是,我的大部分编码都是为Excel创建加载项,即32位。结果是,即使我定位'AnyCPU',VS主机也知道它在32位进程内运行,因此,当代码在Visual中托管时,源代码已锁定工作室。

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

同样,当使用64位应用程序时,这不会发生 - 代码完全被锁定。我非常希望代码完全锁定至少有几个原因:

  1. 我在调试时可能会意外碰到一个键或类似物,我绝对不想这样做。这很罕见,但这是一个问题。

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

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

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

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

    提前感谢任何帮助或想法...

    麦克

3 个答案:

答案 0 :(得分:5)

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

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

代码文档应保持锁定,即使遇到断点,任何更改它的尝试都应触发弹出窗口“启用非托管调试时不允许更改

答案 1 :(得分:4)

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

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

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

祝你好运!

亚当

答案 2 :(得分:3)

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

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

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

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

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

仍然无法完全正常工作。您当时要做的是将该项目的源代码管理设置为Visual Source Safe。 (< - 这是我假设你不喜欢的步骤。)

然后重启VS2k8。

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

现在,要在运行应用程序时将文件设置为只读,请设置构建后的过程以执行此操作。这很容易。

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