在Visual studio中重构.asmx文件

本文关键字:asmx 文件 重构 Visual studio | 更新日期: 2023-09-27 18:16:07

我已经在Visual Studio 2012中创建了我的第一个ASP web服务,其代码现在看起来像这样(这是文件TestService.asmx.cs):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace MyWS
{
    [WebService(Namespace = "http://something.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    public class WS1 : System.Web.Services.WebService
    {
        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}

我现在要做的是将类WS1重命名为更有信息量的东西,例如HelloWorldService。为此,我假设Visual Studio的重构功能应该足够了,所以我选择了WS1,单击重构并重命名了这个类。然而,当运行web服务时,尝试导致服务器错误说

解析器错误消息:无法创建类型'MyWS.WS1'.

从中我得出结论,我的项目中仍然有一部分认为web服务被命名为WS1。我发现文件TestService.asmx保持不变,仍然包含

<%@ WebService Language="C#" CodeBehind="TestService.asmx.cs" Class="MyWS.WS1" %>

我的问题如下:

是否有办法通过VS的重构方法来重命名.asmx文件中的webservice ?如果没有,避免这类问题的最好方法是什么?

谢谢。

在Visual studio中重构.asmx文件

VS重构功能通常仅限于代码名称(即var名称,函数名称,类名称),但Class="MyWS.WS1"中的MyWS.WS1被VS视为字符串,可以是任何值。ReSharper插件有它自己的重构模块,可以搜索字符串引用,但是同样,你需要手动验证更改是否正确,是否应该应用。

手动重命名服务是完全可以的,只是在解决方案范围内对WS1进行常规文本搜索,以确保您没有遗漏任何内容。

我测试了一下,似乎它只搜索。net string类型字符串的代码文件。所以如果你有

var name = "WS1";

它将包含在"strings"搜索结果中

是否有办法通过VS的.asmx文件重命名web服务重构方法?

不,没有办法使用标准VS的重构方法。正如@ peter提到的,标准的VS重构并不关心非代码条目。EDIT: '非代码项'是指'不在编程语言源文件中的项' (.cs, .vb等)。

你需要使用更高级的工具,如ReSharper,它会关心所有字符串出现的重构符号。

如果没有,避免这类问题的最好方法是什么?

为避免在没有ReSharper时出现问题,您需要在所有解决方案文件中手动查找,分析和修复您想要重命名的符号的所有文本条目。
要做到这一点,你可以使用查找文件对话框(Ctrl + shift + F如果你使用标准的VS键盘模式):

  1. 将整个符号文本输入到查找文本框
  2. 确保在查看中选中完整解决方案选项下拉
  3. 确保匹配整个单词复选框被设置,匹配大小写不是设置
  4. 确保*。*中被选中查看这些文件类型下拉菜单

在执行该搜索之后,您将在解决方案中获得您的符号出现的完整列表。也许,这个列表将包含与您想要做的事情无关的事件,因为所提到的搜索条件可能是最弱的。但是,分析找到的每个条目并决定是否需要更改该条目取决于您。
所以这种方法是最可靠的,但也是最难和最慢的。当然,在某些情况下,您可能会使用更严格的搜索条件,从而导致更小的符号条目列表。例如,要只在当前项目中搜索,并使用匹配大小写选项。