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

标签 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,为什么它在工作主机进程中的行为有所不同?如何使其正常工作?

最佳答案

我查看了 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/

相关文章:

c# - 将 DataGridView 内容复制到剪贴板。粘贴时未选择的行将作为空白行出现。!

c# - 如何自定义 ".NET FrameworkInitialization Error"?

c# - 使用异步操作的 TPL 数据流

c# - INotifyPropertyChanged 订阅 self

python - 您可以对 Azure 函数或存储队列的输出进行速率限制吗?

sql-server - 在 Azure SQL 数据库上设置 RESTRICTED_USER

c# - 接口(interface)和基类混合,正确的实现方式

c# - ASP.NET Web API 本地主机 :xxxx/api/product defaults to Home Page and not JSON data(orXML)

c# - WebApi 中自动生成的 EF 代码无法在 Azure 上运行,但在测试时可以在本地运行

c# - 如何在PartitionKey中使用单引号查询Azure表存储