0

我有一个 C# 库,它有 System.Data.SQLite 作为参考,还有一个使用该库的可执行文件(作为第二个项目)。

在库中,我有一个引用 System.Data.SQLite 中的类(特别是SQLiteDataReader类)的函数:

public static IEnumerable<T> SQLiteFetch<T>(Func<SQLiteDataReader, T> formator, string connectionString, string query)

该库可以正确编译,但不能正确编译调用此函数的可执行文件。

这在构建时出现错误,说我“必须添加对程序集'System.Data.SQLite'的引用”。我知道这是由于 IEnumerable,但为什么不通过我的库转发引用?我真的必须在我的可执行文件中添加对 System.Data.SQLite 的引用吗?

4

2 回答 2

2

程序集只知道它的直接引用(例如您的库),并且不会递归加载其引用的引用,因此您必须将引用添加到您的可执行文件中。

您的库可以包含一个从 SQLiteDataReader 继承的包装类来解决此问题,但除了您真的不希望可执行文件具有额外的引用之外,我没有看到这样做的任何特殊优势。

于 2012-04-24T21:31:41.127 回答
1

是的,您必须添加对可执行文件的引用,因为当您创建formator.NET 时,它期望它的类型为Func<SQLiteDataReader, T>. 而且由于您的可执行文件没有对 System.Data.SQLite 的引用,因此它不知道如何处理您的格式化程序。即使您作为格式化程序传递null也是如此。

于 2012-04-24T21:23:36.073 回答