11

我有一个服务器控件作为我的程序集中的一个类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
    {
        //...
    }
}

该站点可以完美运行和编译,但 IntelliSense 在 myID 的子项中中断。更改类和 register 指令中的命名空间以MySiteSC.misc解决此问题,尽管 usingMySite.miscSC没有帮助。在我的解决方案中的其他地方既不使用MySiteSC也不使用,并且任何命名空间中都不存在其他类。miscSCCustomACM

ReSharper 用红色下划线“MySite”(即 register 指令中的命名空间的一部分)并带有工具提示,“Register Directive 未使用,可以安全地删除\n 模糊参考。” 禁用 ReSharper 可防止出现此错误,但不能解决问题。

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

4

4 回答 4

5

恕我直言,Resharper 在这里有问题。可以通过清除 ReSharper 的缓存(ReSharper > Options > General > Clear Caches),然后重新启动 VS 并再次构建来解决该问题。该消息应该会消失。我知道,这不是一个真正的解决方案,但它确实有效。

于 2014-01-21T11:15:19.787 回答
1

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

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

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

[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>
于 2012-07-20T02:33:36.263 回答
0

检查您的 web.config 文件

<assemblies>
...
</assemblies> 

部分以查看您是否有对 MySite.misc 的重复引用

于 2012-07-18T19:44:16.627 回答
0

我通过删除.suo-file(解决方案用户选项(.Suo)文件)解决了类似的问题

于 2014-12-31T07:26:34.190 回答