IronPython中的等效代码

本文关键字:代码 IronPython | 更新日期: 2023-09-27 18:23:47

我在C#中得到了一个(琐碎的)代码示例,我现在正试图将其转换为IronPython:

Clearcore2.Licensing.LicenseKeys.Keys = new[] {
          @"<?xml version=""1.0"" encoding=""utf-8""?>
            <license_key>
                <company_name>Company </company_name>
                <product_name>ProcessingFramework</product_name>
                <features>WiffReaderSDK</features>
                <key_data>
                    2F923C31D1E7E16B191EF2F87DCA7F15831A3F18DED11E05582A98822==
                </key_data>
            </license_key>"};

实际的许可证密钥存储在文件"license"中。我运行:

Licensing.LicenseKeys.Keys = Array[str]([open('license').read()])

但是得到

System.TypeInitializationException: The type initializer for 'Clearcore2.Data.WiffReader.WiffSampleRun' threw an exception. ---> Clearcore2.Licensing.LicenseKeyFormatException: License key can't be parsed! ---> System.ArgumentNullException: String reference not set to an instance of a String.
Parameter name: s
    at System.Text.Encoding.GetBytes(String s)
    at Clearcore2.Licensing.XmlKeyConversions.LoadXmlDocumentForString(String text)
    at Clearcore2.Licensing.XmlKeyConversions.LoadLicenseKey(String licenseKey, String& companyName, String& productName, String& features)
    --- End of inner exception stack trace ---
    at Clearcore2.Licensing.XmlKeyConversions.LoadLicenseKey(String licenseKey, String& companyName, String& productName, String& features)
    at Clearcore2.Licensing.Verifier.VerifyLicenseKey(String publicKey, String licenseKey)
    at Clearcore2.Utility.Licensing.Protection.Verify()
    at Clearcore2.Data.WiffReader.WiffSampleRun..cctor()
    --- End of inner exception stack trace ---
    at Clearcore2.Data.WiffReader.WiffSampleRun..ctor(WiffFile wiffFile, WiffSampleSubTree wiffSampleSubTree, Int32 sampleIndex)
    at Clearcore2.Data.WiffReader.WiffSampleSubTree.GetWiffSampleRun(Int32 sampleIndex)
    at Clearcore2.Data.AnalystDataProvider.AnalystWiffDataProvider.GetWiffSampleRun(String wiffPath, Int32 sampleIndex)
    at Clearcore2.Data.AnalystDataProvider.SampleImplementation.PopulateSampleInfo()
    at Clearcore2.Data.AnalystDataProvider.SampleImplementation..ctor(SampleLocator locator, AnalystWiffDataProvider dataProvider)
    at Clearcore2.Data.AnalystDataProvider.AnalystWiffDataProvider.CreateSampleFromLocator(SampleLocator locator)
    at Clearcore2.Data.AnalystDataProvider.BatchImp.GetSample(Int32 index)
    at Microsoft.Scripting.Interpreter.FuncCallInstruction`3.Run(InterpretedFrame frame)
    at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
    at Microsoft.Scripting.Interpreter.LightLambda.Run4[T0,T1,T2,T3,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3)
    at System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2)
    at Microsoft.Scripting.Interpreter.DynamicInstruction`4.Run(InterpretedFrame frame)
    at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)

我也试过

Licensing.LicenseKeys.Keys = Array[str](open('license').read())

但是具有相同的效果。

事实上Licensing.LicenseKeys.Keys需要Array[str],但我不确定@在C#示例中的含义。

IronPython中C#示例的等效代码是什么?

IronPython中的等效代码

IronPython中的一个近似等价物是

Clearcore2.Licensing.LicenseKeys.Keys = Array[str]([r"""<?xml version=""1.0"" encoding=""utf-8""?>
            <license_key>
                <company_name>Company </company_name>
                <product_name>ProcessingFramework</product_name>
                <features>WiffReaderSDK</features>
                <key_data>
                    2F923C31D1E7E16B191EF2F87DCA7F15831A3F18DED11E05582A98822==
                </key_data>
            </license_key>"""])

C#中的@指定了一个逐字逐句的字符串文字。这意味着不处理转义序列等,并且字符串可能跨越多行。一个原始的三引号字符串应该是等效的文字。

由于读取文件时使用的编码和/或模式,您的初始代码可能会失败。根据文件数据的情况,您可能需要指定打开文件的备用模式(例如,二进制b),或者使用.NET BCL函数,如file.ReadAllText,您也可以从C#中进行检查。