使用一个引用了第二个程序集的程序集,但不直接引用该程序集

5
我写了一个小型的杂项扩展方法库。最近我将几个WPF的FrameworkElement扩展方法加入到其中,但当我在另一个项目(控制台应用程序)中使用我的库时,发现自己遇到了编译器错误,因为它现在需要引用多个与WPF相关的程序集(找不到FrameworkElement等等)。这个项目并没有调用任何涉及FrameworkElement的方法。
随着我的扩展方法库越来越大,我希望不必将其拆分成几个小型程序集,也不想在非WPF项目中添加许多WPF程序集的引用。有没有办法解决这个问题,或者我只能把它分成几个库呢?
我使用的是VS 2013和.NET 4.5。

你正在使用哪个版本的VS?更不那么相关的是,你正在使用哪个版本的.NET呢? - Eric
@Eric VS 2013和.NET 4.5 - cost
为什么不为WPF的内容编写一个单独的程序集呢?将事物分开是更好的选择:你不需要为不必要的东西加载太多内存。 - Khanh TO
这只是一个猜测,你是否在两个项目中针对相同的框架?我还记得有一个设置可以转发依赖项,但我认为那是针对C++的。 - Eric
@KhanhTO 当我开始编写这个库时,它最初被分成两个部分,但后来我担心它会变得越来越大,最终我将不得不为任何想要使用所有扩展方法的代码文件添加半打using语句。它也被我的一些同事使用,我希望只有一个程序集需要引用,以消除他们需要猜测的情况。 - cost
显示剩余5条评论
1个回答

3
原来你可以通过将有问题的类型放到不同的命名空间中来解决这个问题。我的所有扩展方法都在同一个 "Common.Extensions" 命名空间中,这显然会导致该命名空间中的所有内容被加载。通过将 WPF 特定的扩展移动到 "Common.WPF.Extensions" 中,我能够将它们全部保留在同一个程序集中。
更新:
造成此错误的具体原因是公共类型包含在其中一个扩展方法中。事实证明,你可以为没有引用的类型编写扩展方法,但是这些方法不能使用未引用类型的参数、返回值或类型声明。在我的情况下,我有:
public static void SetParentCursor<T>(this FrameworkElement frameworkElement, Cursor cursor) where T : FrameworkElement
where T : FrameworkElement 最终导致它失败了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接