代码之家  ›  专栏  ›  技术社区  ›  sipsorcery

如何克服两个命名空间中的同一类型,system.linq.expressions.expression<tdelegate>?

  •  0
  • sipsorcery  · 技术社区  · 15 年前

    我正在应用程序中定义一些表达式变量,需要引用microsoft.scripting.core。该程序集包含与主.NET框架中的System.Core程序集相同的命名空间。

    我想使用System.Core程序集的定义,因为它是稳定的,而microsoft.scripting.core是alpha。

    如何让我的应用程序首选System.Core中的System.Linq.Expressions命名空间而不是Microsoft.Scripting.Core,但仍然能够保留对它的引用?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Community CDub    7 年前

    正如马克所说,这不是很好-但外部别名是一种方式。

    在解决方案资源管理器的“引用”部分,选择 System.Core 程序集,转到“属性”。将“aliases”属性更改为包含“syscore”,例如

    Aliases: global,syscore
    

    然后在你想使用的任何文件的顶部 System.Linq.Expressions 类型:

    extern alias syscore;
    using syscore::System.Linq.Expressions;
    

    它很难看,但至少它是可能的:)

    作为警告,当涉及扩展方法和外部别名时,我看到了一些问题, as described in this question .

        2
  •  1
  •   Marc Gravell    15 年前

    如果它们是相同的名称空间,但程序集不同,那么您可能需要查看“外部别名”,但这很快就会变得非常混乱。

    如果它们是不同的名称空间,那么只需使用不同的名称空间 using 指令;也可以使用 使用 混叠。但是,lambda将始终(afaik)使用原始名称空间。