Azure工作主机未运行.net 4.5.1?

时间:2014-08-05 07:49:48

标签: c# .net azure .net-4.5

我正在测试Uri.EscapeDataString()方法,并期望http://msdn.microsoft.com/en-us/library/hh367887(v=vs.110).aspx中所述的新行为。但是,当我在一个简单的Azure辅助角色(针对.NET 4.5.1并部署到Windows 2012 R2)中运行此方法时。它没有返回正确的转义字符串。这是我在WorkerRole.Run方法中的简单程序:

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?如何让它正常工作?

1 个答案:

答案 0 :(得分:1)

我查看了Uri类代码。我认为问题是Uri.EscapeDataString使用标志ShouldUseLegacyV2Quirks来确定uri转义是否应该遵循RFC 2396或3986.看来这个标志是由条目程序集的目标框架版本决定的。但是在Azure Wroker主机中,它无法确定框架版本,因为它是本机exe,因此即使执行程序集的目标是4.5,它也会回退到旧行为。