Adding Orchard.Scripting.CSharp

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros 2013-02-27 15:46:23 -08:00
parent c77b88809d
commit 4f77fab77a
17 changed files with 503 additions and 6 deletions

View File

@ -140,6 +140,18 @@ Lucene.net
Website: http://incubator.apache.org/projects/lucene.net.html Website: http://incubator.apache.org/projects/lucene.net.html
Copyright: Copyright (c) 2009 Apache Software Foundation Copyright: Copyright (c) 2009 Apache Software Foundation
License: Apache Software Foundation License 2.0 License: Apache Software Foundation License 2.0
Mono Class Library
-----
Website: http://www.mono-project.com/The_Class_Library
Copyright: Xamarin
License: MIT
Moq
-----
Website: http://code.google.com/p/moq/
Copyright: Copyright (c) 2007. Clarius Consulting, Manas Technology Solutions, InSTEDD
License: New BSD
MySQL Connectors MySQL Connectors
----- -----
@ -148,12 +160,6 @@ License: GNU GENERAL PUBLIC LICENSE Version 2; Oracle
In order to comply with Section 2(a) of the FOSS License Exception, Outercurve Foundation hereby offers any recipient of this package a machine-readable copy of the corresponding source code for Oracle's MySQL Client Libraries upon written demand.  This offer is good for three years. In order to comply with Section 2(a) of the FOSS License Exception, Outercurve Foundation hereby offers any recipient of this package a machine-readable copy of the corresponding source code for Oracle's MySQL Client Libraries upon written demand.  This offer is good for three years.
Moq
-----
Website: http://code.google.com/p/moq/
Copyright: Copyright (c) 2007. Clarius Consulting, Manas Technology Solutions, InSTEDD
License: New BSD
NHibernate, NHibernate Linq NHibernate, NHibernate Linq
----- -----
Website: http://nhforge.org Website: http://nhforge.org

View File

@ -0,0 +1,50 @@
using System;
using Orchard.ContentManagement.Drivers;
using Orchard.Environment.Extensions;
using Orchard.Localization;
using Orchard.Scripting.CSharp.Models;
using Orchard.Scripting.CSharp.Services;
using Orchard.Scripting.CSharp.Settings;
namespace Orchard.Scripting.CSharp.Drivers {
[OrchardFeature("Orchard.Scripting.CSharp.Validation")]
public class ScriptValidationPartDriver : ContentPartDriver<ScriptValidationPart> {
private readonly ICSharpService _csharpService;
private readonly IOrchardServices _orchardServices;
private readonly IWorkContextAccessor _workContextAccessor;
public ScriptValidationPartDriver(
ICSharpService csharpService,
IOrchardServices orchardServices,
IWorkContextAccessor workContextAccessor) {
_csharpService = csharpService;
_orchardServices = orchardServices;
_workContextAccessor = workContextAccessor;
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
public IOrchardServices Services { get; set; }
protected override string Prefix {
get { return "SpamFilter"; }
}
protected override DriverResult Editor(ScriptValidationPart part, Orchard.ContentManagement.IUpdateModel updater, dynamic shapeHelper) {
var script = part.Settings.GetModel<ScriptValidationPartSettings>().Script;
if (!String.IsNullOrWhiteSpace(script)) {
_csharpService.SetParameter("orchardServices", _orchardServices);
_csharpService.SetParameter("contentItem", (dynamic)part.ContentItem);
_csharpService.SetParameter("workContext", _workContextAccessor.GetContext());
_csharpService.SetFunction("t", (Func<string, string>)(x => T(x).Text));
_csharpService.SetFunction("addModelError", (Action<string>)(x => updater.AddModelError("Script", T(x))));
_csharpService.Run(script);
}
return Editor(part, shapeHelper);
}
}
}

View File

@ -0,0 +1,19 @@
using Orchard.ContentManagement.MetaData;
using Orchard.Core.Contents.Extensions;
using Orchard.Data.Migration;
using Orchard.Environment.Extensions;
namespace Orchard.Scripting.CSharp {
[OrchardFeature("Orchard.Scripting.CSharp.Validation")]
public class Migrations : DataMigrationImpl {
public int Create() {
ContentDefinitionManager.AlterPartDefinition("ScriptValidationPart", cfg => cfg
.Attachable()
);
return 1;
}
}
}

View File

@ -0,0 +1,8 @@
using Orchard.ContentManagement;
using Orchard.Environment.Extensions;
namespace Orchard.Scripting.CSharp.Models {
[OrchardFeature("Orchard.Scripting.CSharp.Validation")]
public class ScriptValidationPart : ContentPart {
}
}

View File

@ -0,0 +1,16 @@
Name: C# Scripting
AntiForgery: enabled
Author: The Orchard Team
Website: http://orchardproject.net
Version: 1.0
OrchardVersion: 1.0
Description: Description for the module
Features:
Orchard.Scripting.CSharp:
Description: Provides C# compiler services.
Category: Scripting
Orchard.Scripting.CSharp.Validation
Description: Provides a Script Validation part.
Name: Script Validation
Category: Scripting
Dependencies: Orchard.Scripting.CSharp

View File

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{5D13EF34-8B39-4EC5-847F-E12892ACF841}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Orchard.Scripting.CSharp</RootNamespace>
<AssemblyName>Orchard.Scripting.CSharp</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
<FileUpgradeFlags>
</FileUpgradeFlags>
<OldToolsVersion>4.0</OldToolsVersion>
<UpgradeBackupLocation />
<TargetFrameworkProfile />
<UseIISExpress>false</UseIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
<IISExpressWindowsAuthentication />
<IISExpressUseClassicPipelineMode />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Mono.CSharp">
<HintPath>Lib\Mono.CSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.ComponentModel.DataAnnotations">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions" />
<Reference Include="System.Web.Routing" />
<Reference Include="System.Xml" />
<Reference Include="System.Configuration" />
<Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Content Include="Web.config" />
<Content Include="Properties\AssemblyInfo.cs" />
<Content Include="Module.txt" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
<Project>{2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6}</Project>
<Name>Orchard.Framework</Name>
</ProjectReference>
<ProjectReference Include="..\..\Core\Orchard.Core.csproj">
<Project>{9916839C-39FC-4CEB-A5AF-89CA7E87119F}</Project>
<Name>Orchard.Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Views\DefinitionTemplates\ScriptValidationPartSettings.cshtml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Drivers\ScriptValidationPartDriver.cs" />
<Compile Include="Migrations.cs" />
<Compile Include="Models\ScriptValidationPart.cs" />
<Compile Include="Services\ICSharpService.cs" />
<Compile Include="Services\CSharpService.cs" />
<Compile Include="Settings\ScriptValidationPartSettings.cs" />
<Compile Include="Settings\ScriptValidationPartSettingsEvents.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Web.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Placement.info">
<SubType>Designer</SubType>
</Content>
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target> -->
<Target Name="AfterBuild" DependsOnTargets="AfterBuildCompiler">
<PropertyGroup>
<AreasManifestDir>$(ProjectDir)\..\Manifests</AreasManifestDir>
</PropertyGroup>
<!-- If this is an area child project, uncomment the following line:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Child" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
-->
<!-- If this is an area parent project, uncomment the following lines:
<CreateAreaManifest AreaName="$(AssemblyName)" AreaType="Parent" AreaPath="$(ProjectDir)" ManifestPath="$(AreasManifestDir)" ContentFiles="@(Content)" />
<CopyAreaManifests ManifestPath="$(AreasManifestDir)" CrossCopy="false" RenameViews="true" />
-->
</Target>
<Target Name="AfterBuildCompiler" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)\..\$(ProjectName)" />
</Target>
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>45979</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>
<IISUrl>
</IISUrl>
<NTLMAuthentication>False</NTLMAuthentication>
<UseCustomServer>True</UseCustomServer>
<CustomServerUrl>http://orchard.codeplex.com</CustomServerUrl>
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@ -0,0 +1,3 @@
<Placement>
<Place Parts_Validation_ScriptValidationPartSettings="Content:10"/>
</Placement>

View File

@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Jint")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Orchard")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("02225153-6b07-4599-b29f-7165d3dfcc4b")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using Mono.CSharp;
using Delegate = System.Delegate;
namespace Orchard.Scripting.CSharp.Services {
public class CSharpService : ICSharpService {
public Evaluator Engine { get; private set; }
public IDictionary<string, dynamic> Dictionary { get; private set; }
public void SetParameter(string name, object value) {
DemandCompiler();
Dictionary[name] = value;
Engine.Run(String.Format("dynamic {0} = dictionary[\"{0}\"]", name));
}
public void SetFunction(string name, Delegate value) {
DemandCompiler();
Dictionary[name] = value;
Engine.Run(String.Format("dynamic {0} = dictionary[\"{0}\"]", name));
}
public void Run(string script) {
DemandCompiler();
Engine.Run(script);
}
public object Evaluate(string script) {
DemandCompiler();
return Engine.Evaluate(script);
}
private void DemandCompiler() {
if (Engine != null) {
return;
}
Engine = new Evaluator(new CompilerContext(new CompilerSettings(), new ConsoleReportPrinter()));
Engine.Run("using System;");
Engine.Run("using System.Collections.Generic;");
Engine.Run("var dictionary = new Dictionary<string, dynamic>();");
Dictionary = Engine.Evaluate("dictionary") as IDictionary<string, dynamic>;
}
}
}

View File

@ -0,0 +1,10 @@
using System;
namespace Orchard.Scripting.CSharp.Services {
public interface ICSharpService : IDependency {
void SetParameter(string name, object value);
void SetFunction(string name, Delegate value);
void Run(string script);
object Evaluate(string script);
}
};

View File

@ -0,0 +1,5 @@
namespace Orchard.Scripting.CSharp.Settings {
public class ScriptValidationPartSettings {
public string Script { get; set; }
}
}

View File

@ -0,0 +1,38 @@
using System.Collections.Generic;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
using Orchard.ContentManagement.MetaData.Builders;
using Orchard.ContentManagement.MetaData.Models;
using Orchard.ContentManagement.ViewModels;
using Orchard.Environment.Extensions;
using Orchard.Localization;
namespace Orchard.Scripting.CSharp.Settings {
[OrchardFeature("Orchard.Scripting.CSharp.Validation")]
public class ScriptValidationPartSettingsEvents : ContentDefinitionEditorEventsBase {
public Localizer T { get; set; }
public override IEnumerable<TemplateViewModel> TypePartEditor(ContentTypePartDefinition definition) {
if (definition.PartDefinition.Name != "ScriptValidationPart")
yield break;
var settings = definition.Settings.GetModel<ScriptValidationPartSettings>();
yield return DefinitionTemplate(settings);
}
public override IEnumerable<TemplateViewModel> TypePartEditorUpdate(ContentTypePartDefinitionBuilder builder, IUpdateModel updateModel) {
if (builder.Name != "ScriptValidationPart")
yield break;
var settings = new ScriptValidationPartSettings();
if (updateModel.TryUpdateModel(settings, "ScriptValidationPartSettings", null, null)) {
builder.WithSetting("ScriptValidationPartSettings.Script", settings.Script);
}
yield return DefinitionTemplate(settings);
}
}
}

View File

@ -0,0 +1,12 @@
@model Orchard.Scripting.CSharp.Settings.ScriptValidationPartSettings
@using Contrib.Validation.Settings
@Display.TokenHint()
<fieldset>
<label for="@Html.FieldIdFor(m => m.Script)">@T("Script")</label>
<div>
@Html.TextAreaFor(m => m.Script, new { @class = "textMedium", rows = "5" })
<span class="hint">@T("The script to run everytime the content item is edited. You can use contentItem, orchardServices, workContext, t() and addModelError().")</span>
</div>
</fieldset>

View File

@ -0,0 +1,41 @@
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="webpages:Enabled" value="false" />
</appSettings>
<system.web>
<httpHandlers>
</httpHandlers>
<!--
Enabling request validation in view pages would cause validation to occur
after the input has already been processed by the controller. By default
MVC performs request validation before a controller processes the input.
To change this behavior apply the ValidateInputAttribute to a
controller or action.
-->
<pages
validateRequest="false"
pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<controls>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" namespace="System.Web.Mvc" tagPrefix="mvc" />
</controls>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@ -0,0 +1,41 @@
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<remove name="host" />
<remove name="pages" />
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<pages pageBaseType="Orchard.Mvc.ViewEngines.Razor.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
<add namespace="System.Linq"/>
<add namespace="System.Collections.Generic"/>
<add namespace="Orchard.Mvc.Html"/>
</namespaces>
</pages>
</system.web.webPages.razor>
<system.web>
<compilation targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</assemblies>
</compilation>
</system.web>
</configuration>

View File

@ -146,6 +146,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpgradeTo16", "Orchard.Web\
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Workflows", "Orchard.Web\Modules\Orchard.Workflows\Orchard.Workflows.csproj", "{7059493C-8251-4764-9C1E-2368B8B485BC}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Workflows", "Orchard.Web\Modules\Orchard.Workflows\Orchard.Workflows.csproj", "{7059493C-8251-4764-9C1E-2368B8B485BC}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Scripting.CSharp", "Orchard.Web\Modules\Orchard.Scripting.CSharp\Orchard.Scripting.CSharp.csproj", "{5D13EF34-8B39-4EC5-847F-E12892ACF841}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
CodeCoverage|Any CPU = CodeCoverage|Any CPU CodeCoverage|Any CPU = CodeCoverage|Any CPU
@ -817,6 +819,16 @@ Global
{7059493C-8251-4764-9C1E-2368B8B485BC}.FxCop|Any CPU.ActiveCfg = Release|Any CPU {7059493C-8251-4764-9C1E-2368B8B485BC}.FxCop|Any CPU.ActiveCfg = Release|Any CPU
{7059493C-8251-4764-9C1E-2368B8B485BC}.Release|Any CPU.ActiveCfg = Release|Any CPU {7059493C-8251-4764-9C1E-2368B8B485BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7059493C-8251-4764-9C1E-2368B8B485BC}.Release|Any CPU.Build.0 = Release|Any CPU {7059493C-8251-4764-9C1E-2368B8B485BC}.Release|Any CPU.Build.0 = Release|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.CodeCoverage|Any CPU.Build.0 = Release|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.Coverage|Any CPU.Build.0 = Release|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.FxCop|Any CPU.ActiveCfg = Release|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.FxCop|Any CPU.Build.0 = Release|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5D13EF34-8B39-4EC5-847F-E12892ACF841}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@ -872,6 +884,7 @@ Global
{3BD22132-D538-48C6-8854-F71333C798EB} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {3BD22132-D538-48C6-8854-F71333C798EB} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{7059493C-8251-4764-9C1E-2368B8B485BC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {7059493C-8251-4764-9C1E-2368B8B485BC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{5D13EF34-8B39-4EC5-847F-E12892ACF841} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{ABC826D4-2FA1-4F2F-87DE-E6095F653810} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {ABC826D4-2FA1-4F2F-87DE-E6095F653810} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}
{F112851D-B023-4746-B6B1-8D2E5AD8F7AA} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {F112851D-B023-4746-B6B1-8D2E5AD8F7AA} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}
{6CB3EB30-F725-45C0-9742-42599BA8E8D2} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA} {6CB3EB30-F725-45C0-9742-42599BA8E8D2} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}