Asp.net mvc VS2017上ASP.NET Core的重构功能对我来说不是很好…我做错了什么吗?

Asp.net mvc VS2017上ASP.NET Core的重构功能对我来说不是很好…我做错了什么吗?,asp.net-mvc,razor,asp.net-core-mvc,refactoring,Asp.net Mvc,Razor,Asp.net Core Mvc,Refactoring,我正在学习ASP.NET核心MVC,在进行实验时,我注意到,当我尝试使用Visual Studio提供的内置重构工具重构代码时,它们的工作效果并不好。例如: 通过解决方案资源管理器窗格重命名类通常会失败。成功后,将无法重命名视图声明中的类,例如:@model classnameisnotrename; 如果重命名控制器或操作,则不会更新诸如asp controller=notrename和asp action=notrename之类的帮助器标记。 等 我不想太详细地说明什么是有效的,什么是无效的

我正在学习ASP.NET核心MVC,在进行实验时,我注意到,当我尝试使用Visual Studio提供的内置重构工具重构代码时,它们的工作效果并不好。例如:

通过解决方案资源管理器窗格重命名类通常会失败。成功后,将无法重命名视图声明中的类,例如:@model classnameisnotrename; 如果重命名控制器或操作,则不会更新诸如asp controller=notrename和asp action=notrename之类的帮助器标记。 等 我不想太详细地说明什么是有效的,什么是无效的,我想指出的是,VS2017在重构方面似乎做得不好

所以我的问题是。。。我对VS 2017有什么要求吗?我能做些什么来让重构更好地工作吗


谢谢。

执行重命名之类的操作需要您的项目能够成功构建。如果您尝试重命名类似类的内容,并且项目尚未生成或生成失败,那么重命名也将失败。这是相当合乎逻辑的,因为进行重命名重构需要跟踪引用,而这在没有IL的情况下是无法做到的


就Razor视图和控制器/操作引用而言,您处理的是未编译的字符串和/或代码。因此,它通常不参与基于代码的重构。某些事情,比如重命名,也给了您搜索字符串的选项,您可以这样做来捕获更多应该重命名的地方,比如控制器/动作引用。但是,如果您碰巧在其他地方使用相同的字符串,这也会导致不必要的副作用,在不同的上下文中,这就是默认情况下不进行字符串替换的原因。

有像Resharper这样的工具更擅长这种重构。我本以为像asp controller这样的帮助器标记有足够的上下文,让重构工具知道必须重命名字符串。我想我可以使用诸如nameofMyController.MyAction之类的诡计来回避这个问题。。。。。但是视图@model classnameisnotrename的处理方法是什么?那是不是还没有编译?奇怪的是,你得到的曲线告诉你有问题,但编译器没有抱怨,也没有重命名类,即使项目编译得很好。除了那些不是真正的强类型。它们被视为字符串,因为它们直到运行时才被计算。