6

由于某种原因,我需要(忍受我)使用 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()
4

1 回答 1

8

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

具有自定义别名 myalias 的属性中的别名字段

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

extern alias myalias;

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

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

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

有关别名的更多信息,请参阅StackOverflow关于What use is the Aliases property of assembly references 的答案。

于 2012-09-20T15:54:11.640 回答