generate-code
===========
Generates code from items and files in the project.

Remarks
-------
Pathfinder can generate code based on your project. The most obvious thing is to generate a C# class for each template in the project.

To generate code, execute the task `generate-code`. This wil iterate through the elements in the project and check if a code generator 
is available for that item. If so, the code generator is executed.

Normally you want to run the `generate-code` task before building an assembly, so the C# source files are up-to-date.

Razor
-----
Pathfinder supports code generation using Razor text templating. 

By default Pathfinder will look for files with the extension ".tt.cshtml" in the [Project] directory and below. For each
file found, it will invoke the text templating engine and pass the project model object as a parameter. The output file will
be located in the same directory as the ".tt.cshtml" file, but the extension ".tt.cshtml" will be removed. To create a 
"MyProject.cs" output file, name the Razor template file "MyProject.cs.tt.cshtml".

Example of a template file:

``` 
@model Sitecore.Pathfinder.Projects.IProject
@using Sitecore.Pathfinder.Extensions

@foreach(var template in Model.Templates)
{
    var className = template.ItemName.GetSafeCodeIdentifier() + "Item";
<text>
<pagebreak file="@(template.ShortName).cs" />
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
// </auto-generated>
//------------------------------------------------------------------------------

#pragma warning disable 1591

using Sitecore;
using Sitecore.Data.Items;

namespace Sitecore
{
    #region Designer generated code

    [System.Diagnostics.DebuggerStepThrough()]
    [System.CodeDom.Compiler.GeneratedCode("Sitecore.Pathfinder", "1.0.0.0")]
    public partial class @className
    {
        public @(className)(Item innerItem)
        {
            InnerItem = innerItem;
        }

        [NotNull]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("Sitecore.Pathfinder", "1.0.0.0")]
        public Item InnerItem { get; private set; }
</text>
@foreach (var section in template.Sections)
{
    foreach (var field in section.Fields)
    {
<text>
        [NotNull]
        [System.CodeDom.Compiler.GeneratedCode("Sitecore.Pathfinder", "1.0.0.0")]
        public string @field.FieldName.GetSafeCodeIdentifier() { get { return InnerItem["@field.FieldName"]; } }
</text>
    }
}
<text>
    }

    #endregion
}

#pragma warning restore 1591
</text>
}

``` 

This template generates a file per template in the project (notice the &lt;pagebreak file=""&gt; tag).