Create a MVC 3 web solution template – Part 3, Create a new solution using template

Create a new project from Visual Studio. Find your template from Visual C# templates.

image

It will ask you to configure to use IIS express

image

Because template contains no “packages” folders and the pre-installed nuget packages have no references. Project won’t compile.

Now right click solution and select “Enable Nuget Package Restore”

image

When you build your solution, packages will be downloaded and your nuget package references will be ok to resolve.

image

From time being, pre-installed nuget packages will have updates.

Right click Solution, select “Manage Nuget Packages for Solution…”

Select Updates Tab, to update packages

image

 

It is almost flawless, but….

You need to add project reference “Business”,”Data” to your “Web” project. And “Data” to your “Business” project.

———————————————————————

Download the sample vstemplate from http://mvc3projecttemplate.codeplex.com/

Advertisements

Create a MVC 3 web solution template – Part 2, Create VS template and grouping projects

From part 1, I have talked about my project template structure. Now I want to talk about how do I create the VS templates and group them into one solution.

Visual Studio only allow you to create a template from one single project. So we need to write some vstemplate scripts to group our projects all together into one solution. And save the below script as “Template.vstemplate”.

</pre>
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
 <TemplateData>
 <Name>Web MVC 3 Template</Name>
 <Description>MVC 3 web application template</Description>
 <ProjectType>CSharp</ProjectType>
 <TemplateGroupID>MyApplication</TemplateGroupID>
 <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>
 <SortOrder>1000</SortOrder>
 <CreateNewFolder>false</CreateNewFolder>
 <DefaultName>MVC3Application</DefaultName>
 <ProvideDefaultName>true</ProvideDefaultName>
 <LocationField>Enabled</LocationField>
 <Icon>__TemplateIcon.png</Icon>
 <PreviewImage>__PreviewImage.png</PreviewImage>
 <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
 <PromptForSaveOnCreation>true</PromptForSaveOnCreation>
 <RequiredFrameworkVersion>4.0</RequiredFrameworkVersion>
 </TemplateData>
 <TemplateContent>
 <ProjectCollection>
 <ProjectTemplateLink ProjectName="$safeprojectname$.Business">
 Business.Template\MyTemplate.vstemplate
 </ProjectTemplateLink>
 <ProjectTemplateLink ProjectName="$safeprojectname$.Web">
 Web.Template\MyTemplate.vstemplate
 </ProjectTemplateLink>
 <ProjectTemplateLink ProjectName="$safeprojectname$.Data">
 Data.Template\MyTemplate.vstemplate
 </ProjectTemplateLink>
 </ProjectCollection>
 </TemplateContent>

</VSTemplate>
<pre>

If you use “Export Template” wizard from VS, export all projects from your solution, and unzip them into one folder.

image_thumb

In my example I have three projects, Data, Business and Web. Here is the folder structure.

image_thumb1

Now zip all the files and folders into one single package. Put it into your Visual Studio template folder.

{Documents}\Visual Studio 2010\Templates\ProjectTemplates

Or change your template location to your folder. Open VS -> Tools -> Options -> projects and solutions

image_thumb4

Now if you open VS and create a new project, you can find the template under C# projects.

—————————————————————————————–

Download the sample vstemplate from http://mvc3projecttemplate.codeplex.com/

Create a MVC 3 web solution template – Part 1, Create template projects

I am implementing a web application visual studio 2010 template at work. So it saves everyone’s time on a fresh start project. I decide to have 3 layers, presentation layer – web mvc3, business layer, and data access layer.

I have created a MVC3.WebTemplate solution with 3 projects, Business.Template , Data.Template and Web.Template. Let’s see what I have included in the three layers solution.

image

1. Web.Template

image

1.1 CodeTemplates

This folder contains the t4 templates to generate codes for views and controllers. I have included this in the project and it overrides the MVC default one. For more information, please read this blog https://kevww.wordpress.com/?s=t4+template

Have done this provides me ability to create my own t4 templates in the future, eg. in this template, I have modified the default template to make all controllers inherit a BaseController. When you create a new controller using the scaffolding template, it will create YourController : BaseController.

In the future I will create some view templates to make use of Twitter.Bootstrap and save you some time on styling the views.

1.2 Nuget Packages

I have included the latest packages for Jquery, Modernizr, Elmah, Ninject, Twitter.Bootstrap, etc.

<packages>
  <package id="elmah" version="1.2.0.1" />
  <package id="elmah.corelibrary" version="1.2.1" />
  <package id="Elmah.MVC" version="1.3.2" />
  <package id="EntityFramework" version="4.3.0" />
  <package id="jQuery" version="1.7.1" />
  <package id="jQuery.UI.Combined" version="1.8.17" />
  <package id="jQuery.Validation" version="1.9" />
  <package id="jQuery.vsdoc" version="1.6" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" />
  <package id="Modernizr" version="1.7" />
  <package id="Ninject" version="2.2.1.4" />
  <package id="Ninject.MVC3" version="2.2.2.0" />
  <package id="Twitter.Bootstrap" version="2.0.0" />
  <package id="WebActivator" version="1.4.4" />
</packages>

Of course, you know Nuget will download all the packages in a Package folder in your solution folder. You don’t need to include those files into your template. You can easily restore the Nuget packages to a new solution thsi is created from the template.

image

2. Business.Template

image

Not much to talk about for this project, really it should contain all your business logics.

3. Business.Template

image

3.1 DataContext

For data access, I am using EntityFramework 4.3. I have included a empty context edmx file with t4 templates to generate DbContext & POCOs.

If you want do CodeFirst, you can remove my stuff under Data folder and put your POCOs there.

3.2 Repositories

I have included a generic base repository. To help you start building your repositories. It has the default CRUD operation methods which you can inherit from.

————————————————————————————-

This is all about my project template, please refer to blog part 2 for the VS Template Creation.

Download the sample vstemplate from http://mvc3projecttemplate.codeplex.com/