我正在测试 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,为什么它在工作主机进程中的行为有所不同?如何使其正常工作?
最佳答案
我查看了 Uri 类代码。我认为问题是 Uri.EscapeDataString 使用一个标志 ShouldUseLegacyV2Quirks 来确定 uri 转义是否应该遵循 RFC 2396 还是 3986。看来这个标志是由入口程序集的目标框架版本决定的。然而,在 Azure Wroker Host 中,它无法确定框架版本,可能是因为它是 native exe,因此即使执行程序集的目标是 4.5,它也会回退到旧行为。
关于c# - Azure工作主机未运行.net 4.5.1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25133679/