C# 在VisualStudio中重构.asmx文件

C# 在VisualStudio中重构.asmx文件,c#,asp.net,.net,web-services,visual-studio-2012,C#,Asp.net,.net,Web Services,Visual Studio 2012,我在Visual Studio 2012中创建了我的第一个ASP web服务,其代码如下所示:TestService.asmx.cs文件: 我现在要做的是将类WS1重命名为信息量更大的类,比如HelloWorldService。为此,我假设VisualStudio的重构功能应该足够了,所以我选择了WS1,单击refactor并重命名了该类。但是,在运行webservice时,尝试导致服务器错误 分析器错误消息:无法创建类型“MyWS.WS1” 从中我得出结论,我的项目中仍然有一部分认为web服务

我在Visual Studio 2012中创建了我的第一个ASP web服务,其代码如下所示:TestService.asmx.cs文件:

我现在要做的是将类WS1重命名为信息量更大的类,比如HelloWorldService。为此,我假设VisualStudio的重构功能应该足够了,所以我选择了WS1,单击refactor并重命名了该类。但是,在运行webservice时,尝试导致服务器错误

分析器错误消息:无法创建类型“MyWS.WS1”

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

<%@ WebService Language="C#" CodeBehind="TestService.asmx.cs" Class="MyWS.WS1" %>
我的问题如下:

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


谢谢。

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

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

我对它进行了测试,它似乎只在代码文件中搜索.net字符串类型的字符串。所以如果你有

var name = "WS1";

它将包含在字符串搜索结果中。

VS重构功能通常仅限于代码名,即变量名、函数名、类名,但VS将class=MyWS.WS1中的MyWS.WS1视为字符串值,可以是任何内容。ReSharper插件有自己的重构模块,可以搜索字符串引用,但同样,您需要手动验证更改是否正确,是否应该应用更改

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

我对它进行了测试,它似乎只在代码文件中搜索.net字符串类型的字符串。所以如果你有

var name = "WS1";
它将包含在字符串搜索结果中

有没有办法通过VS重命名.asmx文件中的webservice 重构方法


不,没有办法使用标准VS的重构方法。正如@Petr所提到的,标准与重构并不关心非代码项。 编辑:“非代码项”表示“不在编程语言源文件中的项”.cs、.vb等

您需要使用更高级的工具,像这样,您需要关心重构符号的所有字符串出现情况

如果不是,那么避免此类问题的最佳方法是什么

为了避免没有ReSharper时出现问题,您需要在所有解决方案文件中手动查找、分析和修复要重命名的符号的所有文本项。 要完成此操作,如果使用标准VS键盘方案,则可以使用“在文件中查找”对话框Ctrl+Shif+F:

在“查找内容”文本框中输入整个符号文本 确保在“查找范围”中选择了“整个解决方案”选项 下拉列表 确保已设置“匹配整词”复选框,且未设置“匹配大小写” 设置 确保在“查看这些文件类型”下拉列表中选择了* 执行该搜索后,您将获得解决方案中出现的符号的完整列表。也许,此列表将包含与您想要执行的操作无关的事件,因为所提到的搜索条件是最差的。但这取决于您分析找到的每个条目,并决定是否需要更改此条目。 因此,这种方法是最可靠的,但也是最困难和最慢的。 当然,在某些情况下,您可能会使用更严格的搜索条件,从而减少符号条目列表。例如,仅在当前项目中使用“匹配大小写”选项进行搜索

有没有办法通过VS重命名.asmx文件中的webservice 重构方法


不,没有办法使用标准VS的重构方法。正如@Petr所提到的,标准与重构并不关心非代码项。 编辑:“非代码项”表示“不在编程语言源文件中的项”.cs、.vb等

您需要使用更高级的工具,像这样,您需要关心重构符号的所有字符串出现情况

如果不是,那么避免此类问题的最佳方法是什么

为了避免没有ReSharper时出现问题,您需要在所有解决方案文件中手动查找、分析和修复要重命名的符号的所有文本项。 要完成此操作,如果使用标准VS键盘方案,则可以使用“在文件中查找”对话框Ctrl+Shif+F:

输入整个符号 “查找内容”文本框中的文本 确保在“查找范围”中选择了“整个解决方案”选项 下拉列表 确保已设置“匹配整词”复选框,且未设置“匹配大小写” 设置 确保在“查看这些文件类型”下拉列表中选择了* 执行该搜索后,您将获得解决方案中出现的符号的完整列表。也许,此列表将包含与您想要执行的操作无关的事件,因为所提到的搜索条件是最差的。但这取决于您分析找到的每个条目,并决定是否需要更改此条目。 因此,这种方法是最可靠的,但也是最困难和最慢的。
当然,在某些情况下,您可能会使用更严格的搜索条件,从而减少符号条目列表。例如,仅在当前项目中使用匹配大小写选项进行搜索。

谢谢您的回答,但在重构时,我允许VS搜索字符串,但在asmx文件中找不到服务名称。VS怎么可能看不到该文件?我不知道,我没有使用它。谢谢你的回答,但在重构时,我允许VS搜索字符串,但它在asmx文件中没有找到服务名称。VS怎么可能看不到该文件?我不知道,我不使用它。标准VS重构不关心非代码项。这并不完全正确,因为VS的rename方法确实有一个字符串搜索选项,但似乎VS甚至没有看到文件TestService.asmxSearch in strings选项允许在字符串文本中搜索符号,在本例中,字符串文本位于.cs文件中,而不是在project\solution中的任何其他文件类型(如.asmx)中。我所说的“非代码项”是指“不在编程语言代码文件中的项”。我现在明白了,谢谢。我更新了你的答案,但是接受了Petr Abdulin的答案,因为它很快就发布了。谢谢。我在答案中添加了关于“非代码项”的解释,以供更多读者阅读。标准与重构并不关心非代码项。这并不完全正确,因为VS的rename方法确实有一个字符串搜索选项,但似乎VS甚至没有看到文件TestService.asmxSearch in strings选项允许在字符串文本中搜索符号,在本例中,字符串文本位于.cs文件中,而不是在project\solution中的任何其他文件类型(如.asmx)中。我所说的“非代码项”是指“不在编程语言代码文件中的项”。我现在明白了,谢谢。我更新了你的答案,但是接受了Petr Abdulin的答案,因为它很快就发布了。谢谢。我在答案中添加了关于“非代码项”的解释,以供更多读者阅读。