命名空间中的模糊引用

时间:2012-04-26 22:06:53

标签: asp.net resharper servercontrols

我有一个服务器控件作为我的MySite程序集中的类(即,我的站点的项目不仅包含aspx文件,还包含那些aspx文件引用的服务器控件)。我在aspx文件中使用以下代码:

<%@ Register Assembly="MySite" Namespace="MySite.misc" TagPrefix="TAC" %>
...
<TAC:CustomACM ID="myID" runat="server" />

该类的代码如下:

namespace MySite.misc
{
    public class CustomACM : AutoCompleteExtender, INamingContainer
    {
        //...
    }
}

该网站的工作和编译非常完美,但智能感知在myID的子女中断。将类和register指令中的命名空间更改为MySiteSC.misc可以解决此问题,但使用MySite.miscSC无效。我的解决方案中的其他地方都没有使用MySiteSCmiscSC,并且任何命名空间中都不存在其他CustomACM类。

ReSharper使用工具提示将“MySite”(即寄存器指令中命名空间的一部分)用红色突出显示,“寄存器指令未使用,可以安全删除\ n模糊参考”。禁用ReSharper会阻止此错误显示,但无法解决问题。

我是否可以在不更改CustomACM控件的命名空间的情况下解决此问题(并且不将CustomACM控件移动到其他程序集)?

4 个答案:

答案 0 :(得分:5)

Resharper在这里笨笨笨笨。可以通过清除ReSharper的缓存(ReSharper&gt;选项&gt;一般&gt;清除缓存),然后重新启动VS并再次构建来解决问题。消息应该消失。我知道,这不是一个解决方案,但确实有效。

答案 1 :(得分:1)

要使控件在页面中以声明方式使用,必须将标记前缀映射到控件的命名空间。

在自定义服务器控件项目中,您是否在文件AssemblyInfo.cs中添加了TagPrefixAttribute属性?

您必须在文件末尾添加此行,以在命名空间和前缀之间创建映射。

[assembly: TagPrefix("MySite.misc", "TAC")]

在文件开头添加此行:

Using System.Web.UI;

执行此操作后,无论何时将自定义服务器控件从工具箱拖到.aspx页面,VS都应自动添加Register指令。

或者,如果您的自定义控件将在Web应用程序的多个页面中使用,则可以在web.config文件中指定标记前缀/命名空间映射,而不是使用register指令。

<?xml version="1.0"?>
<configuration>
  <system.web>    
   <pages>
     <controls>
       <add tagPrefix="TAC" Assembly="MySite" 
         namespace="MySite.misc">
       </add>
     </controls>
   </pages>
  </system.web>
</configuration>

答案 2 :(得分:0)

检查您的web.config文件

<assemblies>
...
</assemblies> 

部分,看看是否有重复的MySite.misc引用

答案 3 :(得分:0)

我通过删除.suo - 文件(Solution User Options (.Suo) File

解决了类似的问题