2016-11-10 47 views
4

我跑我的项目代码分析(这是一款Windows Phone 8.1的应用程序)时,以下警告:不通过文字本地化参数

CA1303不通过文字本地化参数法“常见.TranslateError(String)'将一个文字字符串作为参数'text'传递给'XDocument.Parse(String)'。相反,从资源表中检索以下字符串。

这是我的方法:

Public Function TranslateError(ByVal exMessage As String) As XDocument 

    Return XDocument.Parse("<Response><Exception><Message><" & XmlConvert.EncodeName(exMessage) & "></Message></Exception></Response>") 

End Function 

代码工作,这不是什么我已经因为添加的代码来解决然而这警告让我相信,我不这样做很正确的东西。

我已经做了一些研究,并发现MSDN的动作CA1303: Do not pass literals as localized parameters但我不能参考ResourceManager。如果我可以参考,我仍然不明白为什么这是一个问题时,将字符串传递到XDocument.Parse

我想解决警告,而不是压制它。有没有人有任何想法我可以解决这个问题或为什么存在这样的警告?

如果要复制您需要配置规则集使用微软所有规则

enter image description here

然后运行分析选择从Visual Studio菜单ANALYZE和选择运行代码分析...

+0

我看了一下它,复制一下你看到的并得到了相同的结果。在进行一些调整之后,似乎更多的问题是Parse函数的命名参数是“文本”,而不是您控制的任何内容。如果您不能使用ResourceManager加载字符串值以进行输入,那么使用StringBuilder组装这些值并将其传递给解析函数是一个快速解决方法,解决了警告。 –

回答

0

正如@RyanRoos所示,这段代码解决了警告:

Public Function TranslateError(ByVal exMessage As String) As XDocument 

    Dim sb As New StringBuilder("<Response><Exception><Message><![CDATA[" & XmlConvert.EncodeName(exMessage) & "]]></Message></Exception></Response>") 

    Return XDocument.Parse(sb.ToString()) 

End Function