如何在 ASP.Net MVC 6 中编辑和继续

Posted

技术标签:

【中文标题】如何在 ASP.Net MVC 6 中编辑和继续【英文标题】:How to Edit and Continue in ASP.Net MVC 6 【发布时间】:2015-06-03 23:14:06 【问题描述】:

过去使用旧版本的 Visual Studio 和 ASP.NET 可以在调试代码的同时编辑代码(即使有一些限制)。

如何启用编辑并继续将 ASP.Net/VNext (MVC 6) 与 VS 2015 RC 一起使用。 这个功能可用吗?我收到的消息是:

“如果在调试开始时未构建项目,则不允许更改”。

调试模式启动时如何构建项目?

【问题讨论】:

【参考方案1】:

我在我的 ASP.Net MVC 4 项目中编辑并继续在 VS 2015 中工作。 David R 在他的回答中发布了一个链接(为了完整起见,再次在这里)

http://blogs.msdn.com/b/visualstudioalm/archive/2015/04/29/net-enc-support-for-lambdas-and-other-improvements-in-visual-studio-2015.aspx

页面说如果在加载运行时期间设置了环境变量,VS2015 支持在附加到进程上编辑继续。我的理解是这个变量在 CLR 中提示分配一点额外的内存,这是编辑和继续工作所需的。

现在的诀窍是让运行应用程序池的 w3wp.exe 进程加载此变量。在任何其他过程中,我只需打开一个命令行并执行

set COMPLUS_FORCEENC=1
ExeToDebug.exe

但我找不到直接使用环境变量运行我的应用程序池的方法。我在此页面上发布了一个解决方法(作为 CSUdev),这是一个小技巧,它设置机器级环境变量、重置 iis、调用启动应用程序池的 url,然后清除机器级环境变量。 http://forums.iis.net/p/1195182/2115550.aspx?p=True&t=635895941266217500

该线程中的 OP 说,他曾经通过为用户配置文件设置环境变量来在以前版本的 IIS 中工作,然后应用程序池将在其用户配置文件加载时加载,尽管他无法获得在 IIS8 中工作(可能与操作系统中的 WS2012/Win8 安全设置有关)。

tldr;以下是我的工作方式

写了bat脚本...

#set Edit n Continue variable (global... :/ )
setx /m COMPLUS_FORCEENC 1

#kill/restart existing app pools
iisreset

#force app pool to start up (and use the Edit & Continue var)
#you can download wget or curl (instead of start) 
#if you don't want this to open up your default browser every time
start "http://localhost/urlForAspNetApp" 

#clear Edit n Continue var
setx /m COMPLUS_FORCEENC ""

然后VS2015附加到进程w3wp.exe。 巴姆。编辑并继续。感谢 MS 和 VS2015 的各位!

【讨论】:

老鼠......你可以从我的回答中猜到,这是使用.Net 4.5......不确定这将如何在.Net Core和asp.net核心等上工作......但希望这仍然对某人有所帮助。 尽管在这里***.com/questions/1010213/… 尝试了一切,但编辑并继续对我不起作用。但是你的脚本使它工作:) 我唯一要做的额外的事情是确保在工具>选项>调试>常规>“要求源文件与原始版本完全匹配”下未选中。 遗憾的是,它对我不起作用。我验证了 env 变量已设置,我已取消选中“要求源文件与原始版本完全匹配”,并且我已将项目类型切换为 x86。尽管如此,还是没有成功。我只能让它与 IIS Express 一起工作。 就个人而言,我只是通过环境变量->系统变量设置COMPLUS_FORCEENC=1【参考方案2】:

编辑并继续在 Visual Studio 2015 中目前不适用于 ASP.NET 5 应用程序,但计划在 2015 最终版本中支持它。

有关 VS2015 ENC 更改的更多信息,请查看此博客条目: http://blogs.msdn.com/b/visualstudioalm/archive/2015/04/29/net-enc-support-for-lambdas-and-other-improvements-in-visual-studio-2015.aspx

【讨论】:

大卫,关于“编辑并继续”何时出现的任何更新?我已经尝试过 dnx-watch 并且它不起作用。起作用的是 nodemon,但重新启动 dnx 网络调用非常慢。这可能不是问这个问题的最佳地点,但值得一试。 @StuartAllen 任何运气或新信息?谷歌没有提供太多帮助。 @StuartAllen 我猜 ENC 将在 ASP.NET 5 的 RTM 版本或下一个 RC 版本中可用。在 RC1 中它仍然无法正常工作。虽然这是推测,但我也没有找到任何官方公告。 对我来说还是不行,我不得不暂时回到旧模式,没有 ENC 对我的流程来说是一场噩梦。每次编辑前端代码都必须重新启动 dnx 太慢了。【参考方案3】:

在安装此服务更新后,对于 MVC 6 项目的 VS 2015 Update 1,这似乎已修复 https://www.microsoft.com/en-us/download/details.aspx?id=50723

【讨论】:

【参考方案4】:

我有 ASP.NET MVC5 并意识到如果您使用 IIS Express,“编辑并继续”几乎可以开箱即用。

使用“本地 IIS”它不起作用,但没有尝试 matrixugly 帖子中的“COMPLUS_FORCEENC”设置。

因此最终切换到 IIS Express 进行调试。

【讨论】:

以上是关于如何在 ASP.Net MVC 6 中编辑和继续的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.NET Core MVC 6 将编辑器模板放入视图的文件夹中

如何使用 ASP.NET MVC3 编辑嵌套模型

ASP.NET MVC 5 如何在同一视图中编辑 Parent 和 List<> 类型 Child

如何在 ASP.NET 5 MVC 6 (vNext) 中定义 Identity 的密码规则?

如何在 Asp.Net 5 (MVC 6) 中使用实体框架 6.x

使用 ASP.NET MVC,如何最好地避免同时编写添加视图和编辑视图?