Asp.net 防止百分比字符转换

Asp.net 防止百分比字符转换,asp.net,asp.net-mvc-3,msdeploy,webdeploy,Asp.net,Asp.net Mvc 3,Msdeploy,Webdeploy,我正在尝试将Web部署工具包用于我们的MVC3项目,总体而言,部署工作正常,但我们到数据库的连接字符串有一个密码,该密码包含一个百分比(%)字符,后跟两个数字。部署工具包似乎正在将其转换为十六进制字符替换。有没有办法防止这种字符替换,并使连接字符串在开发人员机器上仍然可用?我尝试在Web.Debug.Config文件中放入替换项,甚至添加一个%25而不仅仅是%来尝试让它只替换%字符,它仍然替换完整的值 例如: <connectionStrings> <add name=

我正在尝试将Web部署工具包用于我们的MVC3项目,总体而言,部署工作正常,但我们到数据库的连接字符串有一个密码,该密码包含一个百分比(%)字符,后跟两个数字。部署工具包似乎正在将其转换为十六进制字符替换。有没有办法防止这种字符替换,并使连接字符串在开发人员机器上仍然可用?我尝试在Web.Debug.Config文件中放入替换项,甚至添加一个%25而不仅仅是%来尝试让它只替换%字符,它仍然替换完整的值

例如:

<connectionStrings>
    <add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123%72;database=Database1;"
</connectionStrings>


将连接字符串的pwd部分设置为:

pwd=abc123%252572


经过多次尝试和错误后,我发现它是双向的。第一个过程将%2525转换为%25,第二个过程将%25转换为%。这就是为什么使用%2572时会产生r(%72是r的Unicode代码)。在我看来,这就像解析器中的一个bug。也许知识更渊博的人可以给出更好的解释。

我遇到了完全相同的问题(当然密码不同)

为了使数据库的连接字符串在开发人员机器上工作,我修改了发布设置,以使用“不同”的连接字符串

例如: web.config将包含:

<connectionStrings>
<add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123%72;database=Database1;"
</connectionStrings>

这允许我的开发人员计算机保留其与数据库的连接,并允许主机通过直接发布或通过teamcity自动使用正确的连接字符串。

尝试使用%%来转义百分号?@Jacob-这样就更接近了。我输入了“pwd=abc123%%72”,并在转换后得到了“pwd=abc123%r”。这个怎么样:pwd=abc123%%372@Jacob-仍然不行,现在它输出pwd=abc123r似乎也有同样的问题,但没有答案该解决方案对我来说非常有效。我不知道这是一个bug还是解析器的未记录操作,但如果有人有更好的解释,我也会对它感兴趣。谢谢你终于想出了解决这个问题的办法。此后,我通过使用Parameters.xml文件并将连接字符串作为参数“解决”了这个问题,但我更愿意使用内置的web/app.config功能,即基于构建类型(调试/发布/生产/测试等)进行指定。欢迎您。我想知道这是否可以张贴在微软网站的某个地方,以获得更多的关注。很高兴我能回答,即使已经太晚了。@mateusb:这是几年前的报道。而且虫子还在那里。仅用%25替换%25一次对我很有帮助。@Peter如果您仅使用
%25
就可以使它工作,那么问题似乎已经解决了。当我遇到这个问题时,我们不得不使用
%2525
<connectionStrings>
<add name="MyDB" connectionString="server=Server1;uid=user1;pwd=abc123%72;database=Database1;"
</connectionStrings>
 server=Server1;uid=user1;pwd=abc123%72;database=Database1;