Table of ContentsTable of Content Search CodePorting.Native Product Family CodePorting.Native Cs2Cpp Getting Started Product Overview Installation Licensing How to use CodePorting.Native Cs2Cpp How to Use Command line to port and build Projects How to Use GUI to port and build Projects Developer Guide Porting Simple C# Projects Porting Simple Console Application Porting Simple Library Porting Simple NUnit Test Porting Dependent C# Projects Porting Dependent Console Application Porting Dependent Library Porting Dependent NUnit Test Porting Complex C# Projects How to Convert Complex C# Console Application to C++ How to Convert Complex C# Library to C++ How to Convert Complex C# NUnit Test to C++ What Converts to What Abstract Classes Auto Properties Break Statements Class Constructors Continue Statements Delegates Do While Statemetns Enums TypeCast Enums Events Exceptions Expected Exceptions Finalizers For Statements ForEach Statements Generic Classes Generic Delegates Generic Interfaces Generic Methods Generic Structs If Statements Indexers Lambda Expressions Methods Nested Classes Properties Return Statements Simple Class Simple Interface Simple Struct Simple Test Standard TypeCast Static Class Static Constructor Static-Methods Static Properties Switch Statements Test with Setup Methods Throw Statements Try Catch Finally Statements Try Catch Statements Try Finally Statements Var Expressions Virtual Methods While Statements CodePorting Native Cs2Cpp Attributes CodePorting Native Cs2Cpp Configuration File CodePorting.Native Cs2Cpp Configuration File Structure Attributes in Configuration file Configuration file Nodes Configuration file Options Memory Management Model Using aliasing constructor to create a smart pointer Cmake Support Limitations and Bugs Porter Limitations and Bugs Library Limitations and Bugs Cpp Code Injection Release Notes 2020 CodePorting.Native Cs2Cpp 20.11 CodePorting.Native Cs2Cpp 20.12 CodePorting.Native Cs2Cpp 20.10 CodePorting.Native Cs2Cpp 20.9 CodePorting.Native Cs2Cpp 20.8 CodePorting.Native Cs2Cpp 20.7 CodePorting.Native Cs2Cpp 20.6 CodePorting.Native Cs2Cpp 20.5 CodePorting.Native Cs2Cpp 20.4 CodePorting.Native Cs2Cpp 20.3 CodePorting.Native Cs2Cpp 20.2 CodePorting.Native Cs2Cpp 20.1 2021 CodePorting.Native Cs2Cpp 21.1 2018 CodePorting.Native Cs2Cpp 18.9 CodePorting.Native Cs2Cpp 18.9.1 CodePorting.Native Cs2Cpp 18.10 CodePorting.Native Cs2Cpp 18.11 CodePorting.Native Cs2Cpp 18.12 2019 CodePorting.Native Cs2Cpp 19.1 CodePorting.Native Cs2Cpp 19.2 CodePorting.Native Cs2Cpp 19.3 CodePorting.Native Cs2Cpp 19.4 CodePorting.Native Cs2Cpp 19.4.1 CodePorting.Native Cs2Cpp 19.5 CodePorting.Native Cs2Cpp 19.6 CodePorting.Native Cs2Cpp 19.7 CodePorting.Native Cs2Cpp 19.8 CodePorting.Native Cs2Cpp 19.9 CodePorting.Native Cs2Cpp 19.10 CodePorting.Native Cs2Cpp 19.11 CodePorting.Native Cs2Cpp 19.12 HomeCodePorting.Native Product FamilyCodePorting.Native Cs2CppRelease Notes2020CodePorting.Native Cs2Cpp 20.4Major Features.Net Framework 3.5 was supported in CodePorting.Native.Cs2Cpp.PortingControl package for legacy reasons.PFX/PKCS12 support was added which is based on the OpenSSL library.Minor fixesSystem::Details::ObjectsBag collection class was added.set_ContentLength() method in System::Net::HttpWebRequest was fixed to make its arguments follow .Net style.Porter now generates proper ‘template’ keyword when accessing template methods for template arguments.‘min’ and ‘max’ methods were properly escaped everywhere to avoid compilation errors on GCC and Clang.Extra references were removed from CodePorting.Native.Cs2Cpp.PortingControl package. It no longer depends on any class that is not present in .Net Framework 2.0.A bug was fixed for System::SmartPtr class causing incorrect behavior for assigning two shared pointers which point to the same object but manage lifetimes of the different ones.Exceptions are thrown by a constructor of System::Guid class was put in line with .Net behavior.When porting generic classes, porter now generates friend declarations to other specializations of same class to put access rights in line with such in C#.DPI values are now correctly saved to Tiff format.Different Tiff compression types were supported.Tiff pixel format was supported.XmlNode class now inherits IXPathNavigable and can be used with XslCompiledTransform, the same as in .Net.Botan license file was actualized.Several previously unsupported methods of System::Collections::Generic::LinkedList class were implemented.System::Diagnostics::Trace::Flush() method was implemented.StaticCast conversion was fixed for ‘String to String’ case as it gets generated for some constructs.Several missing methods of XmlTextWriter and XmlWriter classes were implemented.Include string being generated for System::DayOfWeek enum was fixed.user2.cmake class is now included at the end of the ported project’s CMakeLists.txt.String comparison was fixed for some cases in ‘ordinal, ignore case’ mode.Some previously unimplemented methods of WaitHandle class were supported.‘foreach’ statement porting was fixed for IEnumerable.System::Nullable::GetValueOrDefault() method was implemented.CppForceSharedApi attribute is now recognized by porter when applied to static constructors.Behavior of System::Collections::Generic::Stack::Stack(int) constructor was fixed. Implementation of System::Collections::Generic::Stack::ToArray() was improved.Assert.AreEqual() is now working correctly in ported code when its arguments are of different boxed types.More LINQ methods were supported at IEnumerable level.TestCaseSource attribute is now ported properly for multiargument tests with a single method.Attributes are now properly retrieved from base classes through TypeInfo class. TypeInfo::GetCustomAttributes(attribute type, inherit) was fixed.TypeInfo::IsSubclassOf() and TypeInfo::IsAssignableFrom() methods were supported.Several scenarios of using SOAP features were fixed.DateTime::Parse() was fixed for the case of milliseconds being present in the date string.System::Collections::Generic::SortedList::get_Capacity() method was fixed.Please consult the respective sections of our wiki for more information.Full List of Issues Covering all Changes in this ReleaseKeySummaryCategoryWORDSCPP-935Increase the performance of DocumentBase.AddHangingNode and RemoveHangingNode methodsTaskWORDSCPP-714Implement SystemPal.ExecuteWebRequest() and related methodsBugCSPORTCPP-3198Investigate the state of ‘detect_const_methods’ optionTaskCSPORTCPP-3211Add .Net Framework 3.5 build for CodePorting.Native.Cs2Cpp.PortingControlTaskPDFCPP-1223template keyword for gcc compilerTaskCSPORTCPP-3253Add new license pdf file with OpenSSL and skcms informationTaskCSPORTCPP-3238Fix SmartPtr assignment operator issue with aliasing constructorBugSLIDESCPP-2304Porter: Fix nunit_categories option priorityTaskTASKSCPP-1382Fix GUID creation from a string in the case when the string is invalid or empty.TaskTASKSCPP-1387Generate self-friendship for parametrized (generic) classes to provide .Net members accessibility behavior.TaskTASKSCPP-1388Improve Math.Sign compatibility to .NetTaskSLIDESCPP-1714Implement DPI handling for Tiff formatTaskSLIDESCPP-1715Implement Tiff compression types supportTaskSLIDESCPP-1716Implement Tiff pixel format supportTaskPDFCPP-1239Fix XslCompiledTransformBugCSPORTCPP-3258Support CodePorting.Native Cs2CppTaskEMAILCPP-206Preparing Aspose.Email for C++ release 20.1TaskSLIDESCPP-2310Incorrect ‘foreach’ statement translation for IEnumerable typeTaskTASKSCPP-1390Implement Nullable.GetValueOrDefault() method (parameter-less)TaskWORDSCPP-946Rework Aspose.Common string related classesTaskSLIDESCPP-2329Fix InvalidCastException errors when running FunctionTests and FormulaTests (v20.4)BugPDFCPP-1236porting PUBTaskPublic API and Backward Incompatible ChangesMethodArgumentTuple class was fixed to work properly with const methods and const parameters.‘nunit_categories’ option’s behavior was changed. From now on, ‘include’ clauses have higher priority than such of ‘exclude’.System::Math::Sign() now returns int in all cases, same as in .Net.Several SOAP-related classes were supported in System::Web namespace.System::Collections::IDictioary::TryGetValue() method is now const. Poter is fixed to port is as const by default.