Search code examples
c#monomonodevelopgoogle-nativeclient

MonoDevelop Addin for NaCl using 'ProjectServiceExtension'


Hi all i'm trying to make a MonoDevelop addin that I can use to compile out Mono for NaCl projects... but i'm getting a null ref error and can't find enough information to figure out whats going wrong.

The null ref happens when I try to create a project from my Addin in MonoDevelop. All resources are set to build as 'EmbeddedResource'.

Builder.cs:

using System;
using MonoDevelop.Projects;
using MonoDevelop.Core;

namespace MonoDevelop.MonoNaCl
{
    public class Builder : ProjectServiceExtension
    {
        protected override BuildResult Build (IProgressMonitor monitor, SolutionEntityItem item, ConfigurationSelector configuration)
        {
            Console.WriteLine("Yahoo Build");
            return base.Build (monitor, item, configuration);
        }

        protected override void Execute (IProgressMonitor monitor, SolutionEntityItem item, ExecutionContext context, ConfigurationSelector configuration)
        {
            Console.WriteLine("Yahoo Execute");
            base.Execute (monitor, item, context, configuration);
        }
    }
}

MonoDevelop.MonoNaCl.addin.xml: NOTE: I'm really not clear on the 'Extension's I should use and think the issue is in there.

<Addin namespace   = "MonoDevelop"
       id          = "MonoNaCl"
       name        = "Mono for NaCl"
       author      = "Andrew Witte"
       copyright   = "BSD"
       url         = "http://www.URL.com"
       description = "Support for developing MonoNaCl applications."
       category    = "NaCl Development"
       version     = "1.0">

    <Dependencies>
        <Addin id="Ide" version="3.0" />
        <Addin id="Core" version="3.0" />
    </Dependencies>

    <Extension path = "/MonoDevelop/Ide/ProjectTemplates">
        <ProjectTemplate id = "MonoNaClProject" resource = "MonoNaCl.xpt.xml"/>
    </Extension>

    <Extension path = "/MonoDevelop/ProjectModel/ProjectServiceExtensions">
        <Class class = "MonoDevelop.MonoNaCl.Builder"/>
    </Extension>

    <!--<Extension path = "/MonoDevelop/ProjectModel/MSBuildItemTypes">
        <SolutionItem type="MonoDevelop.MonoNaCl.Builder" extension="csproj" guid="{49DFC40D-C27A-4230-A637-8D9669269586}"/>
    </Extension>-->

    <Extension path="/MonoDevelop/ProjectModel/SerializableClasses">
        <DataType class="MonoDevelop.MonoNaCl.Builde" />
    </Extension>
</Addin>

MonoNaCl.xpt.xml:

<?xml version="1.0"?>
<Template originator = "Andrew Witte">

    <TemplateConfiguration>
        <_Name>MonoNaCl Project</_Name>
        <_Category>C#/MonoNaCl</_Category>
        <LanguageName>C#</LanguageName>
        <_Description>Creates a MonoNaCl project.</_Description>
    </TemplateConfiguration>

    <Combine name = "${ProjectName}" directory = ".">
        <Options>
            <StartupProject>${ProjectName}</StartupProject>
        </Options>

        <Project name = "${ProjectName}" directory = "." type = "MonoNaCl">
            <Options/>
        </Project>
    </Combine>
</Template>

And here is the Error after trying to create a project:

System.NullReferenceException: Object reference not set to an instance of an object
  at MonoDevelop.Projects.SolutionFolderItemCollection.OnItemAdded (MonoDevelop.Projects.SolutionItem item) [0x0000b] in /Users/builder/data/lanes/monodevelop-mac-3.0.1/6642975f/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/SolutionFolderItemCollection.cs:59 
  at MonoDevelop.Projects.ItemCollection`1[MonoDevelop.Projects.SolutionItem].InsertItem (Int32 index, MonoDevelop.Projects.SolutionItem item) [0x00008] in /Users/builder/data/lanes/monodevelop-mac-3.0.1/6642975f/source/monodevelop/main/src/core/MonoDevelop.Core/MonoDevelop.Projects/ItemCollection.cs:39 
  at System.Collections.ObjectModel.Collection`1[MonoDevelop.Projects.SolutionItem].Add (MonoDevelop.Projects.SolutionItem item) [0x00000] in <filename unknown>:0 
  at MonoDevelop.Ide.Templates.SolutionDescriptor.CreateEntry (MonoDevelop.Projects.ProjectCreateInformation projectCreateInformation, System.String defaultLanguage) [0x0026c] in /Users/builder/data/lanes/monodevelop-mac-3.0.1/6642975f/source/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/SolutionDescriptor.cs:162 
  at MonoDevelop.Ide.Templates.ProjectTemplate.CreateWorkspaceItem (MonoDevelop.Projects.ProjectCreateInformation cInfo) [0x00000] in /Users/builder/data/lanes/monodevelop-mac-3.0.1/6642975f/source/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Templates/ProjectTemplate.cs:232 
  at MonoDevelop.Ide.Projects.NewProjectDialog.CreateProject () [0x001ef] in /Users/builder/data/lanes/monodevelop-mac-3.0.1/6642975f/source/monodevelop/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects/NewProjectDialog.cs:432 

Solution

  • Remove the type="MonoNaCl" attribute definition in the Project element. You don't have to set the project type, unless you are defining your own Project subclass.