我有:
主程序类-使用库A
库A-具有部分类,这些类混合了库B中的方法
库B-混合方法和接口
因此,在库B中,当我包含实现INode的部分Node类(在库B中定义)时,突然在我的主类中使用库A中的Node时出错。该错误告诉我在主类中我必须有一个使用对库B的声明。
有任何想法吗?
编辑-除代码外
// *** PROGRAM ***
class Program
{
static void Main(string[] args)
{
var context = new Model1Container();
Node myNode; // ** WITHOUT A using for Library B I have an error here ***
}
}
// ** LIBRARY A
namespace TopologyDAL
{
public partial class Node
{
// Auto generated from EF
}
public partial class Node : INode<int> // to add extension methods from Library B
{
public int Key
}
}
// ** LIBRARY B
namespace ToplogyLibrary
{
public static class NodeExtns
{
public static void FromNodeMixin<T>(this INode<T> node) {
// XXXX
}
}
public interface INode<T>
{
// Properties
T Key { get; }
// Methods
}
}
编辑2-要澄清是参考还是使用错误:
因此,针对“ Node myNode;”出现的错误行是:
错误1的类型
在以下位置定义了“ Topology.INode`1”
未引用的程序集。
您必须添加对程序集的引用
'拓扑,版本= 1.0.0.0,
文化=中立,
PublicKeyToken = null”。 U:\我的
Dropbox \ source \ TopologyLibrary \ TopologyDAL_ConsoleTest \ Program.cs 11 13拓扑DAL_ConsoleTest
当我让VS为我修复它时,它将添加Library2作为参考。客户端代码之前或之后都没有“使用”。因此,问题是参考未使用问题。
编辑3-不是专门针对这个问题,但是,我现在注意到在程序项目中,除非我对库B有using语句,否则看不到mixin方法(来自库B)?我可能会为此创建一个单独的问题。
最佳答案
我对发生的事情的理解是,您只能从Main程序引用库A,并且编译器会告诉您添加对库B的引用,因为库B公开了某些库A公开的类型。
要解决此问题,请在主程序项目中添加对库B的引用。
这是小图。如果库A公开了库B中定义的类型,则Main也必须引用库B。以下情况将不起作用:
_____________ _____________ _____________
| Main |references | Library A |references | Library B |
| -|------------|-> -|--------------|-> |
| | | public | | SomeType |
| | | SomeType | | |
| | | | | |
------------- ------------- -------------
仅当通过库A访问库B中定义的类型时,这才是问题。这将在以下情况之一中:
编辑库A(
Node
)中定义的类型派生自库B(INode<int>
)中的类型。库A中定义的方法使用库B中的类型作为返回类型或自变量。
库A中定义的类型将库B中的类型公开为属性或公共字段。
您将需要从Assembly1添加对Assembly3的引用才能进行编译。
_____________ _____________ _____________
| Main |references | Library A |references | Library B |
| -|------------|-> -|--------------|-> |
| | | public | | SomeType |
| |references | SomeType | | |
| -|------------|------------|--------------|-> |
| | | | | |
------------- ------------- -------------
关于c# - 为什么我的使用库A的C#客户端需要对库B有一个using语句(A使用),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33624181/