protected XamarinProject()
        {
            ProjectName = "UnnamedProject";

            Sources = new List<BuildItem> ();
            References = new List<BuildItem> ();
            OtherBuildItems = new List<BuildItem> ();

            ItemGroupList = new List<IList<BuildItem>> ();
            ItemGroupList.Add (References);
            ItemGroupList.Add (OtherBuildItems);
            ItemGroupList.Add (Sources);

            AddReferences ("System"); // default

            CommonProperties = new List<Property> ();
            common = new PropertyGroup (null, CommonProperties);
            DebugProperties = new List<Property> ();
            debug = new PropertyGroup ("'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'", DebugProperties);
            ReleaseProperties = new List<Property> ();
            release = new PropertyGroup ("'$(Configuration)|$(Platform)' == 'Release|AnyCPU'", ReleaseProperties);

            PropertyGroups = new List<PropertyGroup> ();
            PropertyGroups.Add (common);
            PropertyGroups.Add (debug);
            PropertyGroups.Add (release);

            Packages = new List<Package> ();

            SetProperty (KnownProperties.Configuration, "Debug", "'$(Configuration)' == ''");
            SetProperty ("Platform", "AnyCPU", "'$(Platform)' == ''");
            SetProperty ("ErrorReport", "prompt");
            SetProperty ("WarningLevel", "4");
            SetProperty ("ConsolePause", "false");
            SetProperty ("RootNamespace", () => RootNamespace ?? ProjectName);
            SetProperty ("AssemblyName", () => AssemblyName ?? ProjectName);
            SetProperty ("BuildingInsideVisualStudio", "True");

            SetProperty (DebugProperties, "DebugSymbols", "true");
            SetProperty (DebugProperties, "DebugType", "full");
            SetProperty (DebugProperties, "Optimize", "false");
            SetProperty (DebugProperties, KnownProperties.OutputPath, Path.Combine ("bin", "Debug"));
            SetProperty (DebugProperties, "DefineConstants", "DEBUG;");
            SetProperty (DebugProperties, KnownProperties.IntermediateOutputPath, Path.Combine ("obj", "Debug"));

            SetProperty (ReleaseProperties, "Optimize", "true");
            SetProperty (ReleaseProperties, "ErrorReport", "prompt");
            SetProperty (ReleaseProperties, "WarningLevel", "4");
            SetProperty (ReleaseProperties, "ConsolePause", "false");
            SetProperty (ReleaseProperties, KnownProperties.OutputPath, Path.Combine ("bin", "Release"));
            SetProperty (ReleaseProperties, KnownProperties.IntermediateOutputPath, Path.Combine ("obj", "Release"));

            Sources.Add (new BuildItem.Source (() => "Properties\\AssemblyInfo" + Language.DefaultExtension) { TextContent = () => ProcessSourceTemplate (AssemblyInfo ?? Language.DefaultAssemblyInfo) });

            Imports = new List<Import> ();
        }