【问题标题】:Refactoring features for ASP.NET Core on VS 2017 are not working very well for me… Am I doing something wrong?VS 2017 上 ASP.NET Core 的重构功能对我来说效果不佳……我做错了吗?
【发布时间】:2018-07-10 16:19:19
【问题描述】:

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

  • 通过解决方案资源管理器窗格重命名类通常会失败。成功后将无法重命名视图声明中的类(例如:@model ClassNameIsNotRenamed);
  • 如果我重命名控制器或动作,asp-controller="NotRenamed"asp-action="NotRenamed" 等辅助标签不会更新。

我不想过于详细地说明哪些有效,哪些无效,我想说的是,VS 2017 在重构方面似乎做得不好。

所以我的问题是......我是否对 VS 2017 提出了太多要求?我可以做些什么来使重构更好地工作吗?

谢谢。

【问题讨论】:

  • 有像 Resharper 这样的工具更擅长这种重构。

标签: asp.net-mvc razor asp.net-core-mvc refactoring


【解决方案1】:

执行重命名之类的操作需要您的项目能够成功构建。如果您尝试重命名类之类的东西,并且项目尚未构建或构建失败,则重命名也会失败。这是相当合乎逻辑的,因为进行重命名重构需要跟踪引用,而没有 IL 就无法做到这一点。

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

【讨论】:

  • 我会认为诸如“asp-controller”之类的辅助标签有足够的上下文来让重构工具找出必须重命名的字符串。我想我可以使用诸如 nameof(MyController.MyAction) 之类的技巧来解决这个问题.....但是视图“@model ClassNameIsNotRenamed”是怎么回事?那不是编译的吗?奇怪的是,你得到一条波浪线告诉你有问题,但编译器没有抱怨,也没有重命名类,即使项目编译得很好..
  • 除了那些实际上不是强类型的。它们被视为字符串,因为它们直到运行时才被评估。
猜你喜欢
  • 2012-02-01
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
相关资源
最近更新 更多