Version: 5.3
Windows Store Apps: Generated project with .NET scripting backend
Windows Store Apps: Plugins on .NET Scripting Backend

Windows Store Apps: Missing .NET Types on .NET Scripting Backend

The .NET scripting backend that is used on Windows Store is a special .NET version for this platform, which is not entirely compatible with Mono. In particular some data types are missing and some other classes don’t have certain methods, that the same classes do have in Mono.

To make porting existing games to Windows Store easier, some of the missing .NET types are provided by Unity. In addition some extension methods and replacement types were added to make migration easier.

These types are placed in PlaybackEngines\metrosupport\Managed\WinRTLegacy.dll, every Windows Store SDK has its own WinRTLegacy.dll.

아래는 Unity가 제공하는 타입 중 일부입니다.

  • System.Collections.ArrayList
  • System.Collections.Hashtable
  • System.Collections.Queue
  • System.Collections.SortedList
  • System.Collections.Stack
  • System.Collections.Specialized.HybridDictionary
  • System.Collections.Specialized.ListDictionary
  • System.Collections.Specialized.NameValueCollection
  • System.Collections.Specialized.OrderedDictionary
  • System.Collections.Specialized.StringCollection
  • System.IO.Directory
  • System.IO.File
  • System.IO.FileStream
  • System.Xml.XmlDocument
  • System.Xml.XmlTextReader
  • System.Xml.XmlTextWriter

이와 더불어 WinRTLegacy 네임스페이스가 추가되어 추가 클래스와 확장 메서드를 제공합니다. 아래는 그 예제입니다.

  • Extention methods Close() for most System.IO classes (alternatively you can use Dispose(), which is available on both Mono and .NET for Windows Store Apps)
  • WinRTLegacy.TypeExtensions은 System.Type용 GetConstructor(), GetMethod(), GetProperty() 메서드를 가집니다.
  • Mono System.IO.StreamReader와 호환되는 WinRTLegacy.IO.StreamReader 클래스
  • Mono System.IO.StreamWriter와 호환되는 WinRTLegacy.IO.StreamWriter 클래스
  • Mono System.Xml.XmlReader와 호환되는 WinRTLegacy.Xml.XmlReader 클래스
  • Mono System.Xml.XmlWriter와 호환되는 WinRTLegacy.Xml.XmlWriter 클래스

The simplest way to use the replacement classes from WinRTLegacy is via using directive:

#if NETFX_CORE
using XmlReader = WinRTLegacy.Xml.XmlReader;
#else
using XmlReader = System.Xml.XmlReader;
#endif

This way you can use XmlReader class, which will be taken from WinRTLegacy.Xml namespace on Windows Store and from System.Xml namespace elsewhere.

Universal Windows 10 Apps

Some of the types were brought back to .NET for Universal Windows 10 Apps, thus implementations for these types were removed in WinRTLegacy.dll

Windows Store Apps: Generated project with .NET scripting backend
Windows Store Apps: Plugins on .NET Scripting Backend