200 likes | 337 Views
Guidance Automation Toolkit. VISUG 09/08/2006 Jelle Druyts http://jelle.druyts.net. Agenda. Introduction Wizards (Recipes) More than just wizards Continuous Guidance. Guidance Automation Toolkit. Introduction. A 40-page document full of guidelines Architectural layers
E N D
Guidance Automation Toolkit VISUG 09/08/2006 Jelle Druyts http://jelle.druyts.net
Agenda • Introduction • Wizards (Recipes) • More than just wizards • Continuous Guidance
Guidance Automation Toolkit Introduction
A 40-page document full of guidelines • Architectural layers • Solution/project structure • Namespaces, class names, method names, ... • Best practices • Step-by-step instructions Visual Studio customizations • Custom actions • Custom “Add New” items (classes, projects) Code generation Empty quick-start solutions for development teams Home > Introduction Have you ever needed...
Visual Studio has an object model • Call the Visual Studio API’s directly • EnvDTE.dll and EnvDTE80.dll Powerful • Entire Visual Studio object model is exposed Difficult • Registering custom packages in Visual Studio • COM interop with EnvDTE object model Home > Introduction Visual Studio SDK
Guidance Automation • Making reusable code and pattern assets directly available in Visual Studio 2005 • Integrating reusable code into applications • Guiding developers through complex procedures Uses Visual Studio SDK behind the scenes Built and used by Microsoft Patterns & Practices • Web Service Software Factory • Smart Client Software Factory • Mobile Client Software Factory Latest release: June 2006 CTP Home > Introduction Guidance Automation Toolkit
Home > Introduction GAX & GAT
Guidance Automation Toolkit Wizards (Recipes)
A Guidance Package consists of • Visual Studio Templates • Provide integration with Visual Studio • “Create New Project/Item” dialog box • Create Solutions, Projects, Project Items, ... • Defined in .vstemplate files • Guidance Automation Recipes • Automated activities that define a series of instructions • Abstract an action that the developer would need to do manually • E.g. create projects, add references, ... • Defined in an xml file Link between both: Templates refer to Recipes Home > Wizards (Recipes) Guidance Automation Packages
Home > Wizards (Recipes) Visual Studio Templates <VSTemplate Version="2.0" Type="ProjectGroup" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> <TemplateData> <Name>Application Block</Name> <Description>Guidance Package that creates a new Application Block.</Description> <ProjectType>CSharp</ProjectType> <Icon>ApplicationBlock.ico</Icon> </TemplateData> <TemplateContent> <ProjectCollection> <ProjectTemplateLink ProjectName="$ApplicationBlockNamespace$.$ApplicationBlockName$"> Projects\Runtime\Runtime.vstemplate</ProjectTemplateLink> </ProjectCollection> </TemplateContent> <WizardExtension> <Assembly>Microsoft.Practices.RecipeFramework.VisualStudio, Version=1.0.51206.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> <FullClassName>Microsoft.Practices.RecipeFramework.VisualStudio.Templates.UnfoldTemplate </FullClassName> </WizardExtension> <WizardData> <Template xmlns="http://schemas.microsoft.com/pag/gax-template" SchemaVersion="1.0" Recipe="CreateApplicationBlock"> </Template> </WizardData> </VSTemplate>
Home > Wizards (Recipes) Guidance Automation Recipes <GuidancePackage xmlns="http://schemas.microsoft.com/pag/gax-core" Name="JelleDruyts.EnterpriseLibraryGuidance" Caption="Enterprise Library Guidance" Description="Provides guidance around the creation of Application Blocks" Guid="2cac5b9c-a04f-4a49-8a56-3ee5d63bd83f" SchemaVersion="1.0"> <Recipes> <Recipe Name="CreateApplicationBlock"> <Caption>Create a new Enterprise Library Application Block</Caption> <Arguments> <Argument Name="ApplicationBlockName" Required="true"> <ConverterType="Microsoft.Practices.RecipeFramework.Library.Converters. CodeIdentifierStringConverter, Microsoft.Practices.RecipeFramework.Library" /> </Argument> <Argument Name="ApplicationBlockNamespace" Required="true"> <Converter Type="Microsoft.Practices.RecipeFramework.Library.Converters. NamespaceStringConverter,Microsoft.Practices.RecipeFramework.Library" /> </Argument> </Arguments> <GatheringServiceData> <Wizard xmlns="http://schemas.microsoft.com/pag/gax-wizards" SchemaVersion="1.0"> <Pages> <Page> <Title>Application Block Information</Title> <Fields> <Field ValueName="ApplicationBlockName" Label="Application Block Name" InvalidValueMessage="Must be a valid .NET identifier." /> <Field ValueName="ApplicationBlockNamespace" Label="Namespace" InvalidValueMessage="Must be a valid .NET namespace identifier." /> </Fields> </Page> </Pages> </Wizard> </GatheringServiceData> </Recipe> </Recipes> </GuidancePackage>
Home > Wizards (Recipes) Guidance Package Wizard
Guidance Automation Toolkit More than just wizards...
Executed after a recipe is unfolded • E.g. add project references, generate classes, ... Regular .NET classes (pre-built & custom) Strongly-typed input and output arguments • Come from the recipe or another action Typically use EnvDTE Home > More than just wizards Actions <Actions> <Action Name="GetRuntimeProject" Type="...RecipeFramework.Library.Actions.GetProjectAction"> <Input Name="ProjectName" RecipeArgument="RuntimeProjectName" /> <Output Name="Project" /> </Action> <Action Name="GetDesignTimeProject" Type="...RecipeFramework.Library.Actions.GetProjectAction“> <Input Name="ProjectName" RecipeArgument="DesignTimeProjectName" /> <Output Name="Project" /> </Action> <Action Name="AddProjectReference" Type="...Library.Solution.Actions.AddProjectReferenceAction"> <Input Name="ReferringProject" ActionOutput="GetDesignTimeProject.Project" /> <Input Name="ReferencedProject" ActionOutput="GetRuntimeProject.Project" /> </Action> </Actions>
Provide values for recipe arguments, optionally dependant of other recipe arguments • Define project names, post-build commands, ... • Retrieve currently selected project, file, ... Regular .NET classes (pre-built & custom) Home > More than just wizards Value Providers <Argument Name="RuntimeProjectName"> <ValueProvider Type="Evaluator" Expression="$(ApplicationBlockNamespace).$(ApplicationBlockName)"> <MonitorArgument Name="ApplicationBlockNamespace" /> <MonitorArgument Name="ApplicationBlockName" /> </ValueProvider> </Argument>
T4 templates (text templates transformation toolkit) • E.g. generate data access component from database, ... ASP.NET-like syntax with full capabilities of .NET Home > More than just wizards Code Generation <#@ template language="C#" #> <#@ assembly name="System.dll" #> <#@ property processor="PropertyProcessor" name="TargetNamespace" #> <#@ property processor="PropertyProcessor" name="NodeName" #> using System; using Microsoft.Practices.EnterpriseLibrary.Common.Configuration; using Microsoft.Practices.EnterpriseLibrary.Configuration.Design; namespace <#= this.TargetNamespace #> { internal sealed class <#= this.NodeName #> : ConfigurationNode { } }
Guidance Automation Toolkit Continuous Guidance
The show isn’t over when the initial solution has been created • Recipes associated with project items • Unbound / bound (to a specific item) / dynamic • E.g. right-click data access project, choose “Add Data Access Component” • Adding more templates • New projects, e.g. data access project • New project items, e.g. data access component Uses same mechanisms (wizards, actions, ...) Home > Continuous Guidance Recipes stay alive
Separate window listing • Overview information • All the available recipes • History of executed recipes • Links to online help, documentation, ... Home > Continuous Guidance Guidance Navigator