Moving scripting engine to Orchard.Scripting

--HG--
branch : dev
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/AbstractSyntaxTree.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/AbstractSyntaxTree.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/AstNode.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstNode.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/AstVisitor.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/AstVisitor.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/BinaryAstNode.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/BinaryAstNode.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/ConstantAstNode.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/ConstantAstNode.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/ErrorAstNode.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/ErrorAstNode.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/IAstNodeWithToken.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/IAstNodeWithToken.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/MethodCallAstNode.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/MethodCallAstNode.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Ast/UnaryAstNode.cs => src/Orchard.Web/Modules/Orchard.Scripting/Ast/UnaryAstNode.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Interpreter.cs => src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Interpreter.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/InterpreterVisitor.cs => src/Orchard.Web/Modules/Orchard.Scripting/Compiler/InterpreterVisitor.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Lexer.cs => src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Lexer.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Parser.cs => src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Parser.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Token.cs => src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Token.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/TokenKind.cs => src/Orchard.Web/Modules/Orchard.Scripting/Compiler/TokenKind.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/Compiler/Tokenizer.cs => src/Orchard.Web/Modules/Orchard.Scripting/Compiler/Tokenizer.cs
rename : src/Orchard.Web/Modules/Orchard.Widgets/SimpleScripting/ScriptingManager.cs => src/Orchard.Web/Modules/Orchard.Scripting/ScriptingManager.cs
This commit is contained in:
Renaud Paquay
2010-11-28 10:54:21 -08:00
parent 5cdb528d2b
commit 517725b5ce
27 changed files with 204 additions and 33 deletions

View File

@@ -200,6 +200,10 @@
<Project>{2AD6973D-C7BB-416E-89FE-EEE34664E05F}</Project> <Project>{2AD6973D-C7BB-416E-89FE-EEE34664E05F}</Project>
<Name>Orchard.Scripting.Dlr</Name> <Name>Orchard.Scripting.Dlr</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\Orchard.Web\Modules\Orchard.Scripting\Orchard.Scripting.csproj">
<Project>{99002B65-86F7-415E-BF4A-381AA8AB9CCC}</Project>
<Name>Orchard.Scripting</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Web\Modules\Orchard.Setup\Orchard.Setup.csproj"> <ProjectReference Include="..\Orchard.Web\Modules\Orchard.Setup\Orchard.Setup.csproj">
<Project>{8C7FCBC2-E6E1-405E-BFB5-D8D9E67A09C4}</Project> <Project>{8C7FCBC2-E6E1-405E-BFB5-D8D9E67A09C4}</Project>
<Name>Orchard.Setup</Name> <Name>Orchard.Setup</Name>

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using NUnit.Framework; using NUnit.Framework;
using Orchard.Scripting.SimpleScripting.Ast;
using Orchard.Widgets.SimpleScripting.Ast; using Orchard.Widgets.SimpleScripting.Ast;
using Orchard.Widgets.SimpleScripting.Compiler; using Orchard.Widgets.SimpleScripting.Compiler;

View File

@@ -9,22 +9,22 @@ namespace Orchard.Tests.Modules.Scripting {
public class SimpleScriptingTests { public class SimpleScriptingTests {
[Test] [Test]
public void EngineThrowsSyntaxErrors() { public void EngineThrowsSyntaxErrors() {
var engine = new ScriptingEngine(Enumerable.Empty<IRuleProvider>(), new StubCacheManager()); var engine = new ScriptingEngine(Enumerable.Empty<IGlobalMethodProvider>(), new StubCacheManager());
Assert.That(() => engine.Matches("true+"), Throws.Exception); Assert.That(() => engine.Matches("true+"), Throws.Exception);
} }
[Test] [Test]
public void EngineThrowsEvalErrors() { public void EngineThrowsEvalErrors() {
var engine = new ScriptingEngine(Enumerable.Empty<IRuleProvider>(), new StubCacheManager()); var engine = new ScriptingEngine(Enumerable.Empty<IGlobalMethodProvider>(), new StubCacheManager());
Assert.That(() => engine.Matches("1 + 1"), Throws.Exception); Assert.That(() => engine.Matches("1 + 1"), Throws.Exception);
} }
[Test] [Test]
public void EngineUnderstandsPrimitiveValues() { public void EngineUnderstandsPrimitiveValues() {
var engine = new ScriptingEngine(Enumerable.Empty<IRuleProvider>(), new StubCacheManager()); var engine = new ScriptingEngine(Enumerable.Empty<IGlobalMethodProvider>(), new StubCacheManager());
Assert.That(engine.Matches("true"), Is.True); Assert.That(engine.Matches("true"), Is.True);
} }
[Test] [Test]
public void EngineUnderstandsPrimitiveValues2() { public void EngineUnderstandsPrimitiveValues2() {
var engine = new ScriptingEngine(Enumerable.Empty<IRuleProvider>(), new StubCacheManager()); var engine = new ScriptingEngine(Enumerable.Empty<IGlobalMethodProvider>(), new StubCacheManager());
Assert.That(engine.Matches("true and true"), Is.True); Assert.That(engine.Matches("true and true"), Is.True);
} }
} }

View File

@@ -5,11 +5,11 @@ using System.Security;
// General Information about an assembly is controlled through the following // General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information // set of attributes. Change these attribute values to modify the information
// associated with an assembly. // associated with an assembly.
[assembly: AssemblyTitle("Orchard.Scripting")] [assembly: AssemblyTitle("Orchard.Scripting.Dlr")]
[assembly: AssemblyDescription("")] [assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")] [assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Orchard.Scripting")] [assembly: AssemblyProduct("Orchard.Scripting.Dlr")]
[assembly: AssemblyCopyright("Copyright © Outercurve Foundation 2009")] [assembly: AssemblyCopyright("Copyright © Outercurve Foundation 2019")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]

View File

@@ -1,8 +1,7 @@
using System; using System.Collections.Generic;
using System.Collections.Generic; using Orchard.Widgets.SimpleScripting.Ast;
using System.Linq;
namespace Orchard.Widgets.SimpleScripting.Ast { namespace Orchard.Scripting.SimpleScripting.Ast {
public class AbstractSyntaxTree { public class AbstractSyntaxTree {
public AstNode Root { get; set; } public AstNode Root { get; set; }

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Orchard.Scripting.SimpleScripting.Ast;
using Orchard.Widgets.SimpleScripting.Ast; using Orchard.Widgets.SimpleScripting.Ast;
namespace Orchard.Widgets.SimpleScripting.Compiler { namespace Orchard.Widgets.SimpleScripting.Compiler {

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Orchard.Scripting.SimpleScripting.Ast;
using Orchard.Widgets.SimpleScripting.Ast; using Orchard.Widgets.SimpleScripting.Ast;
namespace Orchard.Widgets.SimpleScripting.Compiler { namespace Orchard.Widgets.SimpleScripting.Compiler {

View File

@@ -0,0 +1,5 @@

namespace Orchard.Scripting {
public interface IScriptExpressionEvaluator : ISingletonDependency {
}
}

View File

@@ -0,0 +1,11 @@
Name: Scripting
AntiForgery: enabled
Author: The Orchard Team
Website: http://orchardproject.net
Version: 0.8.0
OrchardVersion: 0.8.0
Description: The scripting module enables the possibility to execute scripts using a simple custom scripting language.
Features:
Orchard.Scripting.:
Description: Simple scripting support.
Category: Scripting

View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>
</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{99002B65-86F7-415E-BF4A-381AA8AB9CCC}</ProjectGuid>
<ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Orchard.Scripting</RootNamespace>
<AssemblyName>Orchard.Scripting</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
</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>..\..\..\OrchardBasicCorrectness.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>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Web.Mvc">
<HintPath>..\..\..\..\lib\aspnetmvc\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
</ItemGroup>
<ItemGroup>
<Compile Include="Ast\AbstractSyntaxTree.cs" />
<Compile Include="Ast\AstNode.cs" />
<Compile Include="Ast\AstVisitor.cs" />
<Compile Include="Ast\BinaryAstNode.cs" />
<Compile Include="Ast\ConstantAstNode.cs" />
<Compile Include="Ast\ErrorAstNode.cs" />
<Compile Include="Ast\IAstNodeWithToken.cs" />
<Compile Include="Ast\MethodCallAstNode.cs" />
<Compile Include="Ast\UnaryAstNode.cs" />
<Compile Include="IScriptExpressionEvaluator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Compiler\Interpreter.cs" />
<Compile Include="Compiler\InterpreterVisitor.cs" />
<Compile Include="Compiler\Lexer.cs" />
<Compile Include="Compiler\Parser.cs" />
<Compile Include="Compiler\Token.cs" />
<Compile Include="Compiler\Tokenizer.cs" />
<Compile Include="Compiler\TokenKind.cs" />
<Compile Include="ScriptingManager.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
<Project>{2D1D92BB-4555-4CBE-8D0E-63563D6CE4C6}</Project>
<Name>Orchard.Framework</Name>
<Private>True</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Module.txt" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<!-- 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" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(ProjectDir)" />
</Target>
<ProjectExtensions>
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>False</UseIIS>
<AutoAssignPort>True</AutoAssignPort>
<DevelopmentServerPort>47866</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,35 @@
using System.Reflection;
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("Orchard.Scripting")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Orchard.Scripting")]
[assembly: AssemblyCopyright("Copyright © Outercurve Foundation 2010")]
[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("c3411c26-8f40-4126-85d9-ea38da650dcf")]
// 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("0.8.0")]
[assembly: AssemblyFileVersion("0.8.0")]
[assembly: SecurityTransparent]

View File

@@ -3,20 +3,29 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using Orchard.Caching; using Orchard.Caching;
using Orchard.Localization; using Orchard.Localization;
using Orchard.Widgets.Services; using Orchard.Scripting.SimpleScripting.Ast;
using Orchard.Widgets.SimpleScripting.Ast;
using Orchard.Widgets.SimpleScripting.Compiler; using Orchard.Widgets.SimpleScripting.Compiler;
namespace Orchard.Widgets.SimpleScripting { namespace Orchard.Widgets.SimpleScripting {
public class GlobalMethodContext {
public string FunctionName { get; set; }
public IList<object> Arguments { get; set; }
public object Result { get; set; }
}
public interface IGlobalMethodProvider {
object Process(GlobalMethodContext context);
}
public interface IScriptingEngine : IDependency { public interface IScriptingEngine : IDependency {
bool Matches(string expression); bool Matches(string expression);
} }
public class ScriptingEngine : IScriptingEngine { public class ScriptingEngine : IScriptingEngine {
private readonly IEnumerable<IRuleProvider> _ruleProviders; private readonly IEnumerable<IGlobalMethodProvider> _ruleProviders;
private readonly ICacheManager _cacheManager; private readonly ICacheManager _cacheManager;
public ScriptingEngine(IEnumerable<IRuleProvider> ruleProviders, ICacheManager cacheManager) { public ScriptingEngine(IEnumerable<IGlobalMethodProvider> ruleProviders, ICacheManager cacheManager) {
_ruleProviders = ruleProviders; _ruleProviders = ruleProviders;
_cacheManager = cacheManager; _cacheManager = cacheManager;
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
@@ -60,7 +69,7 @@ namespace Orchard.Widgets.SimpleScripting {
} }
private object Evaluate(string name, IEnumerable<object> args) { private object Evaluate(string name, IEnumerable<object> args) {
var ruleContext = new RuleContext { FunctionName = name, Arguments = args.ToArray() }; var ruleContext = new GlobalMethodContext() { FunctionName = name, Arguments = args.ToArray() };
foreach (var ruleProvider in _ruleProviders) { foreach (var ruleProvider in _ruleProviders) {
ruleProvider.Process(ruleContext); ruleProvider.Process(ruleContext);

View File

@@ -75,23 +75,6 @@
<Compile Include="Services\RuleContext.cs" /> <Compile Include="Services\RuleContext.cs" />
<Compile Include="Services\WidgetsService.cs" /> <Compile Include="Services\WidgetsService.cs" />
<Compile Include="Shapes.cs" /> <Compile Include="Shapes.cs" />
<Compile Include="SimpleScripting\Ast\AstNode.cs" />
<Compile Include="SimpleScripting\Ast\BinaryAstNode.cs" />
<Compile Include="SimpleScripting\Ast\ConstantAstNode.cs" />
<Compile Include="SimpleScripting\Ast\AstVisitor.cs" />
<Compile Include="SimpleScripting\Ast\ErrorAstNode.cs" />
<Compile Include="SimpleScripting\Ast\MethodCallAstNode.cs" />
<Compile Include="SimpleScripting\Compiler\Interpreter.cs" />
<Compile Include="SimpleScripting\Compiler\InterpreterVisitor.cs" />
<Compile Include="SimpleScripting\Compiler\Lexer.cs" />
<Compile Include="SimpleScripting\Compiler\Tokenizer.cs" />
<Compile Include="SimpleScripting\Compiler\Parser.cs" />
<Compile Include="SimpleScripting\Ast\AbstractSyntaxTree.cs" />
<Compile Include="SimpleScripting\Ast\IAstNodeWithToken.cs" />
<Compile Include="SimpleScripting\ScriptingManager.cs" />
<Compile Include="SimpleScripting\Compiler\Token.cs" />
<Compile Include="SimpleScripting\Compiler\TokenKind.cs" />
<Compile Include="SimpleScripting\Ast\UnaryAstNode.cs" />
<Compile Include="ViewModels\WidgetsIndexViewModel.cs" /> <Compile Include="ViewModels\WidgetsIndexViewModel.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -121,6 +104,10 @@
<Project>{2AD6973D-C7BB-416E-89FE-EEE34664E05F}</Project> <Project>{2AD6973D-C7BB-416E-89FE-EEE34664E05F}</Project>
<Name>Orchard.Scripting.Dlr</Name> <Name>Orchard.Scripting.Dlr</Name>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\Orchard.Scripting\Orchard.Scripting.csproj">
<Project>{99002B65-86F7-415E-BF4A-381AA8AB9CCC}</Project>
<Name>Orchard.Scripting</Name>
</ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Views\Admin\AddLayer.cshtml" /> <Content Include="Views\Admin\AddLayer.cshtml" />

View File

@@ -100,6 +100,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Localization", "Orc
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Scripting.Dlr", "Orchard.Web\Modules\Orchard.Scripting.Dlr\Orchard.Scripting.Dlr.csproj", "{2AD6973D-C7BB-416E-89FE-EEE34664E05F}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Scripting.Dlr", "Orchard.Web\Modules\Orchard.Scripting.Dlr\Orchard.Scripting.Dlr.csproj", "{2AD6973D-C7BB-416E-89FE-EEE34664E05F}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Scripting", "Orchard.Web\Modules\Orchard.Scripting\Orchard.Scripting.csproj", "{99002B65-86F7-415E-BF4A-381AA8AB9CCC}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
CodeCoverage|Any CPU = CodeCoverage|Any CPU CodeCoverage|Any CPU = CodeCoverage|Any CPU
@@ -536,6 +538,16 @@ Global
{2AD6973D-C7BB-416E-89FE-EEE34664E05F}.FxCop|Any CPU.Build.0 = Release|Any CPU {2AD6973D-C7BB-416E-89FE-EEE34664E05F}.FxCop|Any CPU.Build.0 = Release|Any CPU
{2AD6973D-C7BB-416E-89FE-EEE34664E05F}.Release|Any CPU.ActiveCfg = Release|Any CPU {2AD6973D-C7BB-416E-89FE-EEE34664E05F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2AD6973D-C7BB-416E-89FE-EEE34664E05F}.Release|Any CPU.Build.0 = Release|Any CPU {2AD6973D-C7BB-416E-89FE-EEE34664E05F}.Release|Any CPU.Build.0 = Release|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.CodeCoverage|Any CPU.Build.0 = Release|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Coverage|Any CPU.Build.0 = Release|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.FxCop|Any CPU.ActiveCfg = Release|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.FxCop|Any CPU.Build.0 = Release|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{99002B65-86F7-415E-BF4A-381AA8AB9CCC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
@@ -570,6 +582,7 @@ Global
{085948FF-0E9B-4A9A-B564-F8B8B4BDDDBC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {085948FF-0E9B-4A9A-B564-F8B8B4BDDDBC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{FBC8B571-ED50-49D8-8D9D-64AB7454A0D6} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {FBC8B571-ED50-49D8-8D9D-64AB7454A0D6} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{2AD6973D-C7BB-416E-89FE-EEE34664E05F} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5} {2AD6973D-C7BB-416E-89FE-EEE34664E05F} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{99002B65-86F7-415E-BF4A-381AA8AB9CCC} = {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}