Azure工作主机没有运行.net 4.5.1

本文关键字:net 运行 工作 主机 Azure | 更新日期: 2023-09-27 18:16:20

我正在测试Uri.EscapeDataString()方法,并期待http://msdn.microsoft.com/en-us/library/hh367887(v=vs.110).aspx中所述的新行为。然而,当我在一个简单的Azure工作者角色(针对。net 4.5.1并部署到Windows 2012 R2)中运行此方法时。它不会返回正确的转义字符串。下面是我在WorkerRole中的简单程序。运行方法:

public override void Run()
{
  while (true)
  {
    var s = Uri.EscapeDataString("data (test)");
    // This returns "data%20(test)" (.NET 4.0 behavior)
    // However it should return "data%20%28test%29" (.NET 4.5 behavior)
    Thread.Sleep(10000);
    Trace.TraceInformation("Working" + s, "Information");
  }
}

如果我运行EspcapeDataString作为控制台exe,那么它正确地转义字符。为什么它在工作主机进程中的行为不同,即使程序集是针对。net 4.5.1的?如何使其正确工作?

Azure工作主机没有运行.net 4.5.1

我查看了Uri类代码。我想问题出在尤里身上。EscapeDataString使用一个标志ShouldUseLegacyV2Quirks来确定uri转义是否应该遵循RFC 2396或3986。这个标志似乎是由入口程序集的目标框架版本决定的。然而,在Azure workker主机中,它无法确定框架版本,可能是因为它是本机exe,所以即使执行程序集的目标是4.5,它也会回到旧的行为。