【问题标题】:How to control which assembly .Net chooses in a namespace conflict?如何控制 .Net 在命名空间冲突中选择哪个程序集?
【发布时间】:2012-09-13 00:45:20
【问题描述】:

出于某种原因,我需要(忍受我)使用 WinRT 版本的 System.Text.Encoding 命名空间。我可以手动添加对程序集的引用等,但它仍将使用 mscorlib 的实现。而且我显然无法完全删除 mscorlib。

如何强制我的项目使用 WinRT 的 System.Text.Encoding.dll 而不是 mscorlib?

基本上,我需要它来生成这段IL:

call class [System.Text.Encoding]System.Text.Encoding [System.Text.Encoding]System.Text.Encoding::get_UTF8()

而不是这个:

call class [mscorlib]System.Text.Encoding [mscorlib]System.Text.Encoding::get_UTF8()

【问题讨论】:

  • Windows 应用商店中是否允许这样的应用同时引用这两个程序集?
  • @JeffYates 不,我不需要这样。
  • 只是好奇,谢谢。有关如何为您解决此问题的详细信息,请参阅我的答案。
  • 针对 WinRT 的类库不会使用您想要的版本吗? (我不确定您是否可以这样定位它,但是在创建可移植库时可以选择。)

标签: c# .net namespaces conflict il


【解决方案1】:

您需要为引用设置别名。为此,请转到解决方案资源管理器并选择要别名的引用。查看属性并编辑别名字段以添加唯一的别名。

定义唯一别名后,您可以编辑代码以添加 extern alias 声明。

extern alias myalias;

最后,您通过别名引用类型,如(本示例别名为 System.dll):

myalias::System.Diagnostics.Trace.WriteLine("I referenced this via my alias.");

这现在以您想要的确切引用为目标,即使其他引用也提供具有相同名称和命名空间的类型。

有关别名的更多信息,请参阅What use is the Aliases property of assembly references 上的this StackOverflow answer

【讨论】:

  • 这最终不是我实际问题的解决方案,但它确实完美地回答了这个问题(尽管它可能是重复的)
猜你喜欢
  • 2011-02-14
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
相关资源
最近更新 更多