2010-07-08 65 views
6

我有类似下面的架构:为什么我需要引用此程序集,即使它没有被使用

数据(类库来处理我们的实体框架的东西)
组件(中间层类库引用数据资料库)
的WebOffice(Web应用程序引用组件库,但不影响数据库)

现在,我的代码(这个我们生活里面Components.Payment.cs下面的代码片段;和tblPayment包含在我们的数据库中。):

public static Payment Retrieve(int id) 
    { 
     var t = repository.Retrieve(id); 
     //the above line returns a tblPayment object 
     if (t != null) 
      return new Payment(t); 
     return null; 
    } 


    public static Payment Retrieve(tblPayment tblPayment) 
    { 
     return new Payment(tblPayment); 
    } 

我加了这个之后; WebOffice项目提供以下错误:
errorCS0012:类型'Data.Model.tblPayment'是在未引用的程序集中定义的。您必须添加对程序集“Data,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 749b8697f3214861”的引用。

现在,这对我来说不太合理,因为WebOffice项目根本不调用Retrieve(tblPayment tblPayment)方法。 (这只在组件库中使用)

任何线索为什么它会要求数据引用?我是否需要引用引用库引用的每个库? (尝试说5倍快......)

回答

6

这里的一般规则是,必须将对其他程序集公共接口中任何类型的包含程序集的引用添加到项目中。否则,编译器不知道如何解析该类型。

要回答您的第二个问题,您不需要添加对包含只有类型的程序集的引用,这些类型在内部用于其他程序集。

+0

具有完整意义。我能够将Retrieve(tblPayment tblPayment)方法标记为内部方法;我的问题就消失了。再次感谢! – 2010-07-08 18:57:47

2

编译器需要知道tblPayment是为了在Resolve方法上执行重载解析。

1

如果没有关于其所有函数参数的信息,则无法解析库的公共接口。如果您正在引用一个库,其中公共类型的公共方法接受X类型的参数,则无论您是否正在使用该方法,都需要知道X是什么。

相关问题