命名空间中的不明确引用
Posted
技术标签:
【中文标题】命名空间中的不明确引用【英文标题】:Ambiguous Reference in namespace 【发布时间】:2012-05-07 16:45:38 【问题描述】:我在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
可以解决此问题,尽管使用 MySite.miscSC
没有帮助。 MySiteSC
和 miscSC
在我的解决方案中的其他地方都没有使用,并且任何命名空间中都不存在其他 CustomACM
类。
ReSharper 用红色下划线“MySite”(即 register 指令中的命名空间的一部分)并带有工具提示,“Register Directive 未使用,可以安全删除\n 模糊参考。”禁用 ReSharper 可防止出现此错误,但不能解决问题。
我是否可以在不更改 CustomACM 控件的命名空间(并且不将 CustomACM 控件移动到不同的程序集)的情况下解决此问题?
【问题讨论】:
这是 Web 应用程序而不是网站,对吗? (您没有将 cs 文件存储在 App_Code 中) 这是一个 Web 应用程序,我没有使用 App_Code。 【参考方案1】:我通过删除.suo
-文件(Solution User Options (.Suo) File)解决了类似的问题
【讨论】:
【参考方案2】:恕我直言,Resharper 在这里有问题。可以通过清除 ReSharper 的缓存(ReSharper > Options > General > Clear Caches),然后重新启动 VS 并再次构建来解决该问题。该消息应该会消失。我知道,这不是一个真正的解决方案,但它确实有效。
【讨论】:
根据我的原始帖子,完全禁用 ReSharper 并不能解决问题。 @Brian “根据我的原始帖子”是什么意思?我看不到您禁用 ReSharper 的任何提示。您说过,ReSharper 强调了 MySite。所以当你禁用 ReSharper 时它仍然有下划线?还是我搞错了? 来自原始帖子:“禁用 ReSharper 可防止出现此错误,但不能解决问题。”问题是,“该站点可以完美运行和编译,但 IntelliSense 在 myID 的子项中中断。” 信不信由你。我过度阅读了至少 10 次。对不起!【参考方案3】:要使您的控件能够在页面中以声明方式使用,您必须将标记前缀映射到控件的命名空间。
在您的自定义服务器控件项目中,您是否在您的文件 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>
【讨论】:
完成此操作后,我可以使用工具箱将 CustomACM 控件拖到页面上。这样做会自动在页面顶部添加一个 register 指令,但新添加的 register 指令仍然存在引用不明确的问题。 @ydd1987:不,我仍在使用我在原始问题中提到的解决方法(即,为受影响的控件使用不同的命名空间)。【参考方案4】:检查您的 web.config 文件
<assemblies>
...
</assemblies>
查看是否有对 MySite.misc 的重复引用
【讨论】:
不,我的 web.config 程序集中有 0 个对 MySite 的引用。当我添加一个时,它确实可以正确解决,但不能防止错误。 您是否检查了属性资源管理器下的参考资料是否有重复的列表? 没有重复的列表。以上是关于命名空间中的不明确引用的主要内容,如果未能解决你的问题,请参考以下文章
错误 BC30560:“ReportViewer”在命名空间“Microsoft.Reporting.WebForms”中不明确