我有一个服务器控件作为我的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
无效。我的解决方案中的其他地方都没有使用MySiteSC
和miscSC
,并且任何命名空间中都不存在其他CustomACM
类。
ReSharper使用工具提示将“MySite”(即寄存器指令中命名空间的一部分)用红色突出显示,“寄存器指令未使用,可以安全删除\ n模糊参考”。禁用ReSharper会阻止此错误显示,但无法解决问题。
我是否可以在不更改CustomACM控件的命名空间的情况下解决此问题(并且不将CustomACM控件移动到其他程序集)?
答案 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)