为什么此处需要引用未使用的程序集
本文关键字:未使用 程序集 引用 为什么 | 更新日期: 2023-09-27 18:20:25
我有一个引用dll的exe。
在dll中有一些方法,我们感兴趣的两个方法是:
private static CacheItemPolicy _policy = new CacheItemPolicy();
[MethodImpl(MethodImplOptions.NoInlining)]
public static void SetValue(string Key, object Value)
{
SetValue(Key, Value, _policy);
}
[MethodImpl(MethodImplOptions.NoInlining)]
public static void SetValue(string Key, object Value, TimeSpan TTL)
{
SetValue(Key, Value, GetPolicy(TTL));
}
[MethodImpl(MethodImplOptions.NoInlining)]
private static CacheItemPolicy GetPolicy(TimeSpan TTL)
{
return new CacheItemPolicy()
{
SlidingExpiration = TTL
};
}
在我的exe中,当我尝试调用这个方法时:只使用cache.SetValue(key, item);
,它会编译并运行良好,但当使用cache.SetValue(key, item, new TimeSpan(0, 1, 0));
调用时,我会得到以下异常:
错误1类型"System.Runtime.Cacheching.CacheItemPolicy"是在未引用的程序集中定义的。必须添加对程序集"System.Runtime.Caching,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"的引用。
为什么编译器说我需要将此引用添加到一个程序集,而此时我没有直接在代码中使用该程序集?
我确信我错过了一些简单的东西。我看了为什么我需要引用一个dll,我';我没有直接使用?但它指的是接口,这里的情况并非如此。
编辑:还有这个:
protected static void SetValue(string Key, object Value, CacheItemPolicy Policy)
{
// work is done here
}
但这是受保护的,不应该对调用exe可见。
Edit2:当上面这个取CacheItemPolicy
的SetValue
设置为private
或internal
时,它就工作了,为什么protected
(和protected internal
)会导致它需要程序集?
由于静态SetValue
受到保护,因此它对派生类可见。
因此,如果你可以从类派生(即它是公共的),那么你就有机会派生并使用该方法,这意味着引用是必需的。