C# 为什么Uri.EscapeDataString在我的CI服务器上返回的结果与我的开发机器不同?

C# 为什么Uri.EscapeDataString在我的CI服务器上返回的结果与我的开发机器不同?,c#,.net,encoding,C#,.net,Encoding,在我的台式机上,我得到了这个 var result=Uri.EscapeDataString(“zdskjhf&*^65sdfh/\\sdf”); //结果==zdskjhf%26%2A%5E65sdfh%2F.%3C%3E%5Csdf 现在,在我的CI服务器上,部分结果没有编码。。。。 我明白了 \\result==zdskjhf%26*%5E65sdfh%2F.%3C%3E%5Csdf 注意第二个结果中间的星号在第一个结果中,它被编码 有人能解释一下发生了什么事吗 更新1: 它正在使用.NE

在我的台式机上,我得到了这个

var result=Uri.EscapeDataString(“zdskjhf&*^65sdfh/\\sdf”);
//结果==zdskjhf%26%2A%5E65sdfh%2F.%3C%3E%5Csdf

现在,在我的CI服务器上,部分结果没有编码。。。。 我明白了

\\result==zdskjhf%26*%5E65sdfh%2F.%3C%3E%5Csdf

<>注意第二个结果中间的<强>星号<强>在第一个结果中,它被编码

有人能解释一下发生了什么事吗

更新1: 它正在使用.NET4.5并显示星号已编码

那么这是否意味着我的机器.NET Fiddle都错了?或者我们都是对的,而CI服务器是错的

来自生成服务器的一些诊断信息。
Microsoft(R)生成引擎版本12.0.30723.0
[Microsoft.NET Framework,版本4.0.30319.34209]
版权所有(C)微软公司。版权所有。

(我不太确定如何为我的本地开发机器获取此信息。它是win8.1+VS 2013更新3。)

所有项目都是.NET 4.5…而不是4.5.1

更新2: 我决定在所有的.NET框架上运行这段代码(这很重要)。 这是结果

Data:     abcde *.(.)."

.NET 2.0: abcde%20*.(.).
.NET 3.0: abcde%20*.(.).
.NET 3.5: abcde%20*.(.).
.NET 4.0: abcde%20*.(.).

-- MSDN NOTES: Bug now fixed here --

.NET 4.5:   abcde%20%2A.%28.%29.
.NET 4.5.1: abcde%20%2A.%28.%29. 
.NET 4.5.2: abcde%20%2A.%28.%29. 
.NET 4.5.3: abcde%20%2A.%28.%29.
这就意味着

  • .NET 4.5
    ,这些值未编码。凯尔,好的
  • =
    .NET 4.5
    这些值已编码

链接:。

REF:其中包含大量调试信息…

搜索“escape”。

我意识到这个问题是关于CI系统和开发系统的不同行为,但我想我会分享我的发现

如果您的代码在asp.net下运行,只需将项目设置为目标4.5并在具有4.5或更高版本的计算机上运行,您仍然可能会获得4.0行为。您需要确保在web.config中设置了

如果中不存在
属性 在Web.config中,我们假设应用程序需要4.0怪癖行为


都是相同版本的框架、操作系统等?非常奇怪。我将尝试获取一些框架版本信息…它应该编码“未保留字符”,星号是否编码取决于它是否使用RFC2396或RFC3986第2.3节中的“未保留字符”定义。根据这一点,在.NET4.5中,行为上的差异似乎被认为是一个错误修复(星号不再需要用现代URI进行编码)。所以我的机器不应该对它们进行编码,那么?好的。所以我使用的是旧版本的.NET?我以为我是最新的?我的visual studio-project-设置为.NET 4.5。。不是4.5.1(顺便说一句,没有4.5.2选项)。运行时版本很重要。安装最新版本。此外,用于4.5.2更改(上面)的链接实际上用于4.5更改(关于4.0)。当我单击4.5.2更改()时,它没有提到任何关于
Uri.EscapeDataString
。(4.5.2变更将其与4.5.1.进行比较,4.5.1.也与此无关)。。。。那么这不意味着4.5有了新的变化吗。。我已经在我的项目中瞄准了这一点……事实上。我的显示器刚好够宽,所以.NET4.5.2可以换行,看起来就像桌子上方的一个标题!好的,您的目标是4.5,但是CI服务器也有吗?确保一些突破性的更改位于功能标志后面。使用app.config文件()使CI服务器实际启用所有4.5更改。当针对某个版本时,VS会自动在app.config文件中设置此属性。在开场白中,我列出了版本号:
[Microsoft.NET Framework,版本4.0.30319.34209]
。选中此项,使post()看起来CI服务器是
4.5.2
。我可以确认我在
4.5.1
。。隐马尔可夫模型。。我正在尝试向我的单元测试项目添加一个
App.Config
文件的想法/我提示电梯等待音乐。