当前位置:  开发笔记 > 前端 > 正文

标识符"提交#0"在Azure功能中不符合CLS

如何解决《标识符"提交#0"在Azure功能中不符合CLS》经验,为你挑选了1个好方法。

我希望有人可以帮助我.我正在实现一个Azure功能,我试图将XML消息序列化为.Net对象.这是我目前使用的代码:

public static void Run(string input, TraceWriter log) 
{
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(App));
    // more code here....
}
public class App
{
    public string DataB { get; set; }
}

但是,我总是遇到这个错误:

2017-01-17T12:21:35.173 Exception while executing function: Functions.ManualXmlToJson. mscorlib: Exception has been thrown by the target of an invocation. System.Xml: Identifier 'Submission#0' is not CLS-compliant.

参数名称:ident.

我尝试过没有它们的XmlAttributes.我在文件中添加了buildOptions:warningsAsErrorsas 但没有任何反应.说实话,我没有想法,因为这段代码实际上是在App Console中运行的.falseproject.json

我想是某些参数,我真的很感激,如果有人可以建议我如何解决它.

谢谢!



1> Fabio Cavalc..:

这里你最好的选择是将你试图序列化的类分解为一个单独的类库,并从你的函数中引用它.

如果您App在不同的程序集中实现上面的类,您的功能代码将如下所示:

#r ".dll"

using System;
using ;

public static void Run(string input, TraceWriter log) 
{
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(App));
}

上面的代码假定一个私有程序集引用,您可以将程序集上传到函数文件夹内的bin文件夹.

您可以在此处找到有关外部参考的更多信息:https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp#referencing-external-assemblies

我打开一个问题来解决符合CLS的名称,所以这不会让人感到困惑:https: //github.com/Azure/azure-webjobs-sdk-script/issues/1123

另一个值得尝试的选择(可以最小化您需要对代码进行的更改)是使用DataContractSerializer.您可以在此处找到更多信息.

以下是使用DataContractSerializer(上面的类型)函数的快速示例:

#r "System.Runtime.Serialization"

using System;
using System.Xml;
using System.Runtime.Serialization;

public static void Run(string input, TraceWriter log) 
{
   string xml = WriteObject(new App { DataB = "Test"});
   log.Info(xml);
}


[DataContract(Name = "App")]
public class App
{
    [DataMember]
    public string DataB { get; set; }
}




public static string WriteObject(App app)
{
    using (var output = new StringWriter())
    using (var writer = new XmlTextWriter(output) { Formatting = Formatting.Indented })
    {
        var serializer = new DataContractSerializer(typeof(App));
        serializer.WriteObject(writer, app);

        return output.GetStringBuilder().ToString();
    }
}

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有