Visual studio 2010 是否可以在Visual Studio 2010中编辑并继续而不暂停执行?

Visual studio 2010 是否可以在Visual Studio 2010中编辑并继续而不暂停执行?,visual-studio-2010,xna,hotswap,edit-and-continue,Visual Studio 2010,Xna,Hotswap,Edit And Continue,我最近看了一段Notch的Ludum Dare直播。他在游戏中广泛使用Eclipse的热交换功能。(这是我指的视频) 我想对C#和XNA也这样做。幸运的是,VisualStudio具有“编辑并继续”功能。但是,我希望在渲染代码运行时编辑它,而不是暂停它 我是否可以设置Visual Studio来执行相同的操作?我注意到,当一个进程中断时,会有一个复选框用于中断所有进程。是否可以在另一个线程中设置渲染循环,以便在我进行更改时游戏继续渲染?我可以告诉您如何设置,但您不会喜欢它: 1)在visual

我最近看了一段Notch的Ludum Dare直播。他在游戏中广泛使用Eclipse的热交换功能。(这是我指的视频)

我想对C#和XNA也这样做。幸运的是,VisualStudio具有“编辑并继续”功能。但是,我希望在渲染代码运行时编辑它,而不是暂停它


我是否可以设置Visual Studio来执行相同的操作?我注意到,当一个进程中断时,
会有一个复选框用于中断所有进程。是否可以在另一个线程中设置渲染循环,以便在我进行更改时游戏继续渲染?

我可以告诉您如何设置,但您不会喜欢它:

1)在visual studio实例中运行游戏可执行文件(game.exe-->vsInstanceA)

2)使用单独的visual studio实例(modifiable.dll-->vsInstanceB)在单独的dll中编写可修改的代码

*请注意,这样做可以编译modifiable.dll,从而进行编译时错误检查等*

。。。而现在情况变得棘手了……

3a)game.exe需要引用modifiable.dll不是.vcproj,而是实际的dll

3b)当您按下“魔术键”(让game.exe查找按键),让game.exe卸载可修改的.dll,然后重新加载。您可以通过mscorlib中提供的Assembly和AppDomain类轻松实现这一点。当然,这意味着您需要卸载game.exe中的任何从属系统

请注意,在这一部分中有很多人挥手致意,这是相当多的工作,但非常简单(例如谷歌搜索:)

。。。在那之后,你就可以走了

3-alt)如果3b)不适合您,请选择其他选项:

  • 按下时,可以调用msbuild.exe来重新生成modifiable.dll “万能钥匙”
  • 您可以使用CSharp编译器dll动态地 重新编译每个类,而不是整个modifiable.dll

但不幸的是,在我10多年的.net开发过程中,这是唯一的方法,除非有人创建了第三方产品(即:他们按照我说的做,为你做)

这可能不是你想要的,但这是我一直在做的。当你的比赛进行时,只需投一个破发点。一旦停止,您可以编辑内容,删除断点,然后按F5继续


在大多数情况下,这允许您在游戏运行时编辑内容,然后继续运行游戏,但这并不适用于所有情况。您不能添加或删除类级别的内容,也不能添加/删除整个函数或参数。大多数情况下,我这样做是为了测试不同的数字和方程式,以获得每次更新都会遇到的较小问题。

更新:这个答案现在可用


我一直在努力寻找一种方法来做到这一点。我知道这不能回答你的确切问题。但实际上,您需要的是一个工作流,在这个工作流中,您可以在零(或接近零)延迟的情况下进行代码更改,我想我已经找到了仅使用VisualStudio就可以实现的最接近的更改。(从而避免了巨大的工程工作量和处理“异常”项目)

实现此工作流的方法实际上非常简单,只要你想一想:

使用快捷键

我想到的第一种方法是使用设置断点的普通编辑并继续方法。只有使用键盘,你才能更快地完成这项工作。这只适用于在循环中调用的代码(例如:draw/update)。单击要修改的代码,添加断点(F9),断点几乎会立即被命中,修改代码,删除断点(F9),然后再次运行代码(F5)

这很好。您不必使用鼠标点击左侧列中相对较小的“添加断点”目标。但它确实会将输入焦点移动到行的开头,因此在开始编辑之前,您通常必须再次使用鼠标来修复该问题

我想要更快的。所以我想出了一个更好的解决方案:

再次使用键盘:按Ctrl+Alt+Break以“全部中断”。这几乎会立即进入调试器,而无需担心设置断点或要修改的代码是否在循环中运行。这会将编辑器窗口和插入符号焦点更改为执行中断的文档,但您可以通过按Ctrl+-键“向后导航”立即修复它

然后,您可以进行编辑,只需按F5键即可查看它们的实际操作。你只需要使用鼠标一次(或者根本不用鼠标)就可以开始选择你想要开始打字的地方——正如你所期望的那样

诚然,Ctrl+Alt+Break和Ctrl+-是可怕的组合键,对于您希望能够非常快速地执行的操作来说。如果只有一个按键就更好了

如果您拥有完整的VisualStudio,您可能会将其转换为宏或外接程序。Express没有这些功能,所以您最好修改您的按键绑定(工具、自定义、键盘…),并将其绑定到相邻的两个按键上,您可以快速连续按下。或者使用外部宏实用程序

就我个人而言,我已经设置了两个组合键,通过设置为鼠标上备用按钮的宏连续按下(两个组合键之间似乎不需要延迟)。这相当好用——因为我通常同时选择文本。以后我可能还会添加一个键盘宏

到目前为止,我已经发现了这种方法的两个小缺陷:

  • 当您再次运行应用程序时,VisualStudio将为其提供焦点。如果它能保持焦点就好了。将鼠标左键单击添加到我的宏是