从另一个

时间:2017-01-07 22:12:47

标签: c# debugging

我正在C#中编写游戏编辑器和游戏。有两个应用程序:游戏编辑器是一个Winforms / SFML混合体,游戏本身就是一个Windows应用程序,只需在SFML中使用一个非常标准的Program.cs运行一个简单的游戏循环。

在编辑器中,我希望能够启动游戏可执行文件以测试更改。优选地,效果类似于通过通常的多个启动项目方法从Visual Studio中启动两个应用程序。

现在,我猜这里有几个选项:

  • 在某种后台线程中启动Program.cs。我不想这样做,因为我更喜欢进程隔离。
  • 通过Process.Start()的路径启动可执行文件。我不确定它是否提供与往常一样的调试支持级别。我没有玩过程中的调试模式调用足以知道这是否是我正在寻找的。
  • 其他一些我不知道的简单方法?

做这类事情的标准程序是什么?

编辑:我被要求解释这不是Attach debugger in C# to another process的副本我之前看过这个问题并且仍然发布,因为那个专注于一般调试任何应用程序。我在这里有更专业的东西因为我直接控制两个应用程序;此外,这里选择的方法不依赖于互操作,因为它有一些答案。

1 个答案:

答案 0 :(得分:0)

@thehennyy提出了一个很好的建议。我选择AppDomain作为隔离级别,作为可接受的妥协。

以下是解决方案:

/* Get nearest weekend to the provided date
** @param {Date} date - date to get weekends nearst to
** @returns {Array} array of Dates [Saturday, Sunday]
*/
function getNearestWeekend(date) {
  // Copy date so don't mess with provided date
  var d = new Date(+date);
  // If weekday, move d to next Saturday else to current weekend Saturday
  if (d.getDay() % 6) {
    d.setDate(d.getDate() + 6 - d.getDay());
  } else {
    d.setDate(d.getDate() - (d.getDay()? 0 : 1));
  }
  // Return array with Dates for Saturday, Sunday
  return [new Date(d), new Date(d.setDate(d.getDate() + 1))]
}

// Some tests
[new Date(2017,0,7),  // Sat 7 Jan
 new Date(2017,0,8),  // Sun 8 Jan
 new Date(2017,0,9),  // Mon 9 Jan
 new Date(2017,0,12)  // Thu 12 Jan
].forEach(function(d) {
  var opts = {weekday:'short', day:'numeric', month:'short'};
  console.log('Date: ' + d.toLocaleString('en-GB',opts) + ' | Next weekend: ' +
              getNearestWeekend(d).map(d =>d.toLocaleString('en-GB',opts)).join(' and ')
  );
});
 
相关问题