【问题标题】:ASP.NET "Reference required to assembly" errorASP.NET“程序集所需的参考”错误
【发布时间】:2009-02-03 23:39:59
【问题描述】:

我有一个使用数据层程序集 DAL 的 ASP.NET 页面 A。我使用
<%@ Assembly Name="NGC.DAL" %> 标记引用 DAL 程序集,因为没有要添加引用的项目。我将程序集本身复制到页面的 bin 文件夹中。

程序集 DAL 是一个引用 SystemSystem.Data 的项目。

现在当 A 调用 DAL 中的方法时,编译器会报错

BC30652:包含“System.Data.IDbConnection”类型的程序集“System.Data,Version=2.0.0.0,Culture=neutral,PublicKeyToken=969db8053d3322ac,Retargetable=Yes”所需的参考。将一个添加到您的项目中。

我尝试使用<%@Import Namespace="System.Data" %> 标签引用程序集System.Data,并尝试将其复制到bin 文件夹并使用
<%@ Assembly Name="System.Data" %> 标签引用它,两者都直接在A 中。没有任何效果。

为什么使用项目 C 的项目 A 需要引用 B C 而不仅仅是 B,为什么上述方法不起作用?

This MSDN 线程涵盖了该问题,但没有显示有效的解决方案。

编辑:正如 Robert Wagner 建议的那样,我添加了对 web.config 的引用。 现在我收到另一条错误消息。 BC30560:“CommandBehavior”在命名空间“System.Data”中不明确。这很奇怪,因为 web.config 中的那个是我在页面内引用的唯一一个。

也许值得一提的是,在 DAL 程序集中引用和使用的 System.Data 来自紧凑框架。但既然它是我唯一使用的,那么歧义从何而来?

【问题讨论】:

    标签: asp.net assemblies asp.net-2.0 reference


    【解决方案1】:

    您很可能从 DAL dll 中的 System.Data 类继承并在您的网站中使用该类。它需要一个引用才能解析这些类的引用,否则编译器将不知道类契约是什么。

    您不需要像在 GAC 中那样复制 System.Data。

    更好的方法是在 web.config 文件中添加引用:

     <system.web>
        <compilation debug="true">
          <assemblies>
             <add assembly="System.Data, Version=2.0.0.0, Culture=neutral,
                  PublicKeyToken=B77A5C561934E089" />
          </assemblies>
        </compilation>
      </system.web>
    

    当您说“没有要添加引用的项目”时,您使用的是 Visual Studio 吗?如果是这样,为什么不使用 Web 应用程序或网站项目?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      相关资源
      最近更新 更多