【问题标题】: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 没有帮助。 MySiteSCmiscSC 在我的解决方案中的其他地方都没有使用,并且任何命名空间中都不存在其他 CustomACM 类。

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

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

【问题讨论】:

  • 这是 Web 应用程序而不是网站,对吗? (您没有将 cs 文件存储在 App_Code 中)
  • 这是一个 Web 应用程序,我没有使用 App_Code。

标签: asp.net resharper servercontrols


【解决方案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 的引用。当我添加一个时,它确实可以正确解决,但不能防止错误。
    • 您是否检查了属性资源管理器下的参考资料是否有重复的列表?
    • 没有重复的列表。
    猜你喜欢
    • 2014-10-15
    • 2023-03-12
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多