在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 ?如果没有,避免这类问题的最好方法是什么?
谢谢。
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键盘模式):
- 将整个符号文本输入到查找文本框
- 确保在查看中选中完整解决方案选项下拉
- 确保匹配整个单词复选框被设置,匹配大小写不是设置
- 确保*。*在中被选中查看这些文件类型下拉菜单
在执行该搜索之后,您将在解决方案中获得您的符号出现的完整列表。也许,这个列表将包含与您想要做的事情无关的事件,因为所提到的搜索条件可能是最弱的。但是,分析找到的每个条目并决定是否需要更改该条目取决于您。
所以这种方法是最可靠的,但也是最难和最慢的。当然,在某些情况下,您可能会使用更严格的搜索条件,从而导致更小的符号条目列表。例如,要只在当前项目中搜索,并使用匹配大小写选项。