VS 2012 RC中的Intellisense不适用于SignalR类

时间:2012-08-28 11:54:09

标签: intellisense visual-studio-2012 signalr

我已导入SignalR Nuget包,SignalR样本在我的项目中运行良好。但即使在完成所有需要使用语句之后,我也无法使用intellisense为SignalR中的类工作(如Hub类)。

2 个答案:

答案 0 :(得分:2)

集线器代理是在运行时动态生成的,因此您不会获得任何智能感知。

您可以使用Hubify.exe(请参阅http://weblogs.asp.net/davidfowler/archive/2012/06/10/signalr-0-5-1-released.aspx上的Hubify部分)生成静态javascript文件。

或者你可以创建自己的T4模板,它可以做同样的事情。请参阅:https://github.com/SignalR/SignalR/issues/106

<强>更新

关于C#的intellisense 您不会获得ClientsCaller的智能感知,因为它们是动态的。

  

缺少编译时类型检查也会导致缺少IntelliSense。由于C#编译器不知道对象的类型,因此无法枚举其属性和方法。这个问题可以通过额外的类型推断来解决,就像在Visual Studio的IronPython工具中所做的那样,但是现在C#没有提供它。   http://visualstudiomagazine.com/articles/2011/02/01/understanding-the-dynamic-keyword-in-c4.aspx

public class Chat : Hub 
  {
      public void Send(string message) 
      {
          // No intellisense for addMessage, sorry
          Clients.addMessage(message);
      }
  }

答案 1 :(得分:1)

查看SignalR文档here Hub.Caller和客户端本质上是动态的 dynamic是.Net 4中添加的新关键字,dosent支持编译时检查,因此您无法获得动态对象的智能感知。所有动态对象仅在运行时检查。即使你自己创造了一个像

这样的动态对象
dynamic d = new ExpandoObject();

并尝试执行此操作"d."。你不会得到任何intellisense因为框架剂量知道什么都存在于动态对象中。并且只会在运行时发现。