C# C“a中的扩展方法”;网站主控“;包装在名称空间困境中的模板

C# C“a中的扩展方法”;网站主控“;包装在名称空间困境中的模板,c#,asp.net,C#,Asp.net,问题是,为什么我需要在我的Site.Master文件中添加一个“import”指令来获取Intellisense,而html助手却没有它 使用简单的C#字符串扩展方法而不使用名称空间==没有问题。然而,我想把这个扩展放在一个名称空间中,成为一个好的程序员 如果我将它包装在一个名称空间中,您必须做几件事。这是我的分机: namespace MySystemCore { public static class StringExtensions { public sta

问题是,为什么我需要在我的Site.Master文件中添加一个“import”指令来获取Intellisense,而html助手却没有它

使用简单的C#字符串扩展方法而不使用名称空间==没有问题。然而,我想把这个扩展放在一个名称空间中,成为一个好的程序员

如果我将它包装在一个名称空间中,您必须做几件事。这是我的分机:

namespace MySystemCore
{
    public static class StringExtensions
    {
        public static string F(this string s, params object[] args)
        {
            return string.Format(s, args);
        }
    }
}
因此,通过反复试验,我让它工作了,但我想分享我的观察结果。希望它将来能帮助其他人

注意:我正在使用Site.Master中的扩展方法

  • 将“使用MySystemCore;”添加到Site.Master.cs文件(代码隐藏文件)

    • 运行时错误,未找到扩展方法
  • 将“
    ”添加到web.config中的
    配置块中

    • 工作,没有智慧
  • 合并#1和#2

    • 工作,没有智慧
  • 将“
    ”添加到Site.Master文件

    • 用智能感知工作

  • 我同意这有时很烦人。但这一切都与关注点分离。您必须学习所有自己的和MS名称空间,才能找到正确的扩展方法。

    这是一个VS限制,当您将其添加到web.config中时,IntelliSense不会显示

    但为了完整起见,我将讨论其原因:
  • 方法1根本不是一种正确的方法,因为使用指令(导入将编译为ASP.NET预处理器使用)的范围是一个编译单元(即单个文件)
  • 方法2运行正常,因为它将using指令添加到编译选项中,这会影响应用程序中的所有编译单元。如果在这种情况下没有出现智能感知,那是因为VS不够聪明,不能考虑Web.CONFIG.
  • 方法3和方法2一样有效。方法1与主文件完全无关,它只影响我前面提到的.cs文件。方法2类似于将using自动添加到所有.cs文件中
  • 方法4之所以有效,是因为VS知道您使用它的文件与使用它的文件相同。