Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #861 from jchannon/Internationalization

Localisation with Razor
  • Loading branch information...
commit f5c7b0faccb93a09f272757b319d36e95b86da5e 2 parents e3e7e7d + 41df96e
@thecodejunkie thecodejunkie authored
Showing with 1,707 additions and 43 deletions.
  1. +20 −0 src/Nancy.Demo.Razor.Localization/Modules/HomeModule.cs
  2. +139 −0 src/Nancy.Demo.Razor.Localization/Nancy.Demo.Razor.Localization.csproj
  3. +72 −0 src/Nancy.Demo.Razor.Localization/Resources/Text.Designer.cs
  4. +123 −0 src/Nancy.Demo.Razor.Localization/Resources/Text.de-DE.resx
  5. +123 −0 src/Nancy.Demo.Razor.Localization/Resources/Text.en-US.resx
  6. +123 −0 src/Nancy.Demo.Razor.Localization/Resources/Text.resx
  7. +7 −0 src/Nancy.Demo.Razor.Localization/Views/CultureView-de-DE.cshtml
  8. +8 −0 src/Nancy.Demo.Razor.Localization/Views/CultureView.cshtml
  9. +18 −0 src/Nancy.Demo.Razor.Localization/Views/Index.cshtml
  10. +17 −0 src/Nancy.Demo.Razor.Localization/Views/razor-layout.cshtml
  11. +30 −0 src/Nancy.Demo.Razor.Localization/Web.Debug.config
  12. +31 −0 src/Nancy.Demo.Razor.Localization/Web.Release.config
  13. +44 −0 src/Nancy.Demo.Razor.Localization/Web.config
  14. +1 −0  src/Nancy.Tests/Nancy.Tests.csproj
  15. +325 −19 src/Nancy.Tests/Unit/Conventions/DefaultViewLocationConventionsFixture.cs
  16. +22 −0 src/Nancy.Tests/Unit/ViewEngines/DefaultTextResourceFixture.cs
  17. +16 −12 src/Nancy.ViewEngines.Razor.Tests/RazorViewEngineFixture.cs
  18. +8 −0 src/Nancy.ViewEngines.Razor/HtmlHelpers.cs
  19. +1 −0  src/Nancy.ViewEngines.Razor/Nancy.ViewEngines.Razor.csproj
  20. +9 −1 src/Nancy.ViewEngines.Razor/NancyRazorViewBase.cs
  21. +14 −9 src/Nancy.ViewEngines.Razor/RazorViewEngine.cs
  22. +1 −1  src/Nancy.ViewEngines.Razor/RazorViewEngineApplicationStartupRegistrations.cs
  23. +37 −0 src/Nancy.ViewEngines.Razor/TextResourceFinder.cs
  24. +403 −0 src/Nancy.sln
  25. +5 −0 src/Nancy/Bootstrapper/NancyInternalConfiguration.cs
  26. +47 −1 src/Nancy/Conventions/DefaultViewLocationConventions.cs
  27. +10 −0 src/Nancy/Localization/ITextResource.cs
  28. +51 −0 src/Nancy/Localization/ResourceBasedTextResource.cs
  29. +2 −0  src/Nancy/Nancy.csproj
View
20 src/Nancy.Demo.Razor.Localization/Modules/HomeModule.cs
@@ -0,0 +1,20 @@
+namespace Nancy.Demo.Razor.Localization.Modules
+{
+ using System.Globalization;
+
+ public class HomeModule : NancyModule
+ {
+ public HomeModule()
+ {
+ Get["/"] = parameters => View["Index"];
+
+ Get["/cultureview"] = parameters => View["CultureView"];
+
+ Get["/cultureviewgerman"] = parameters =>
+ {
+ Context.Culture = new CultureInfo("de-DE");
+ return View["CultureView"];
+ };
+ }
+ }
+}
View
139 src/Nancy.Demo.Razor.Localization/Nancy.Demo.Razor.Localization.csproj
@@ -0,0 +1,139 @@
+<?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>
+ </ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{396F0BCE-5B51-4B6A-931E-312880C24725}</ProjectGuid>
+ <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Nancy.Demo.Razor.Localization</RootNamespace>
+ <AssemblyName>Nancy.Demo.Razor.Localization</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <UseIISExpress>true</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>
+ </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.Web.DynamicData" />
+ <Reference Include="System.Web.Entity" />
+ <Reference Include="System.Web.ApplicationServices" />
+ <Reference Include="System.ComponentModel.DataAnnotations" />
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="System.Web.Extensions" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Web" />
+ <Reference Include="System.Xml" />
+ <Reference Include="System.Configuration" />
+ <Reference Include="System.Web.Services" />
+ <Reference Include="System.EnterpriseServices" />
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Web.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Modules\HomeModule.cs" />
+ <Compile Include="Resources\Text.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Text.resx</DependentUpon>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Views\Index.cshtml" />
+ <Content Include="Views\razor-layout.cshtml" />
+ <Content Include="Views\CultureView.cshtml" />
+ <Content Include="Views\CultureView-de-DE.cshtml" />
+ <None Include="Web.Debug.config">
+ <DependentUpon>Web.config</DependentUpon>
+ </None>
+ <None Include="Web.Release.config">
+ <DependentUpon>Web.config</DependentUpon>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Resources\Text.de-DE.resx" />
+ <EmbeddedResource Include="Resources\Text.en-US.resx" />
+ <EmbeddedResource Include="Resources\Text.resx">
+ <Generator>PublicResXFileCodeGenerator</Generator>
+ <LastGenOutput>Text.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Nancy.Hosting.Aspnet\Nancy.Hosting.Aspnet.csproj">
+ <Project>{15b7f794-0bb2-4b66-ad78-4a951f1209b2}</Project>
+ <Name>Nancy.Hosting.Aspnet</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Nancy.ViewEngines.Razor\Nancy.ViewEngines.Razor.csproj">
+ <Project>{2c6f51df-015c-4db6-b44c-0e5e4f25e2a9}</Project>
+ <Name>Nancy.ViewEngines.Razor</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Nancy\Nancy.csproj">
+ <Project>{34576216-0dca-4b0f-a0dc-9075e75a676f}</Project>
+ <Name>Nancy</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ </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" />
+ <ProjectExtensions>
+ <VisualStudio>
+ <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
+ <WebProjectProperties>
+ <UseIIS>True</UseIIS>
+ <AutoAssignPort>True</AutoAssignPort>
+ <DevelopmentServerPort>0</DevelopmentServerPort>
+ <DevelopmentServerVPath>/</DevelopmentServerVPath>
+ <IISUrl>http://localhost:61703/</IISUrl>
+ <NTLMAuthentication>False</NTLMAuthentication>
+ <UseCustomServer>False</UseCustomServer>
+ <CustomServerUrl>
+ </CustomServerUrl>
+ <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
+ </WebProjectProperties>
+ </FlavorProperties>
+ </VisualStudio>
+ </ProjectExtensions>
+ <!-- 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">
+ </Target>
+ -->
+</Project>
View
72 src/Nancy.Demo.Razor.Localization/Resources/Text.Designer.cs
@@ -0,0 +1,72 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.17929
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Nancy.Demo.Razor.Localization.Resources {
+ using System;
+
+
+ /// <summary>
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ /// </summary>
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class Text {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Text() {
+ }
+
+ /// <summary>
+ /// Returns the cached ResourceManager instance used by this class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Nancy.Demo.Razor.Localization.Resources.Text", typeof(Text).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ public static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ /// <summary>
+ /// Looks up a localized string similar to Hello Sir.
+ /// </summary>
+ public static string Greeting {
+ get {
+ return ResourceManager.GetString("Greeting", resourceCulture);
+ }
+ }
+ }
+}
View
123 src/Nancy.Demo.Razor.Localization/Resources/Text.de-DE.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="Greeting" xml:space="preserve">
+ <value>Guten Tag</value>
+ </data>
+</root>
View
123 src/Nancy.Demo.Razor.Localization/Resources/Text.en-US.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="Greeting" xml:space="preserve">
+ <value>Howdy Partner</value>
+ </data>
+</root>
View
123 src/Nancy.Demo.Razor.Localization/Resources/Text.resx
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+ <!--
+ Microsoft ResX Schema
+
+ Version 2.0
+
+ The primary goals of this format is to allow a simple XML format
+ that is mostly human readable. The generation and parsing of the
+ various data types are done through the TypeConverter classes
+ associated with the data types.
+
+ Example:
+
+ ... ado.net/XML headers & schema ...
+ <resheader name="resmimetype">text/microsoft-resx</resheader>
+ <resheader name="version">2.0</resheader>
+ <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+ <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+ <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+ <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+ <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+ <value>[base64 mime encoded serialized .NET Framework object]</value>
+ </data>
+ <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+ <comment>This is a comment</comment>
+ </data>
+
+ There are any number of "resheader" rows that contain simple
+ name/value pairs.
+
+ Each data row contains a name, and value. The row also contains a
+ type or mimetype. Type corresponds to a .NET class that support
+ text/value conversion through the TypeConverter architecture.
+ Classes that don't support this are serialized and stored with the
+ mimetype set.
+
+ The mimetype is used for serialized objects, and tells the
+ ResXResourceReader how to depersist the object. This is currently not
+ extensible. For a given mimetype the value must be set accordingly:
+
+ Note - application/x-microsoft.net.object.binary.base64 is the format
+ that the ResXResourceWriter will generate, however the reader can
+ read any of the formats listed below.
+
+ mimetype: application/x-microsoft.net.object.binary.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.soap.base64
+ value : The object must be serialized with
+ : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+ : and then encoded with base64 encoding.
+
+ mimetype: application/x-microsoft.net.object.bytearray.base64
+ value : The object must be serialized into a byte array
+ : using a System.ComponentModel.TypeConverter
+ : and then encoded with base64 encoding.
+ -->
+ <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+ <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+ <xsd:element name="root" msdata:IsDataSet="true">
+ <xsd:complexType>
+ <xsd:choice maxOccurs="unbounded">
+ <xsd:element name="metadata">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" />
+ </xsd:sequence>
+ <xsd:attribute name="name" use="required" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="assembly">
+ <xsd:complexType>
+ <xsd:attribute name="alias" type="xsd:string" />
+ <xsd:attribute name="name" type="xsd:string" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="data">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ <xsd:attribute ref="xml:space" />
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="resheader">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:choice>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:schema>
+ <resheader name="resmimetype">
+ <value>text/microsoft-resx</value>
+ </resheader>
+ <resheader name="version">
+ <value>2.0</value>
+ </resheader>
+ <resheader name="reader">
+ <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <data name="Greeting" xml:space="preserve">
+ <value>Hello Sir</value>
+ </data>
+</root>
View
7 src/Nancy.Demo.Razor.Localization/Views/CultureView-de-DE.cshtml
@@ -0,0 +1,7 @@
+@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
+
+@{
+ Layout = "razor-layout.cshtml";
+}
+
+<h1>You're here based on ther German culture set in HomeModule however the HomeModule only calls return View["CultureView"]. It uses View Location Conventions therefore there must be a file called CultureView-de-DE.cshtml</h1>
View
8 src/Nancy.Demo.Razor.Localization/Views/CultureView.cshtml
@@ -0,0 +1,8 @@
+@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
+
+@{
+ Layout = "razor-layout.cshtml";
+}
+
+<h1>You're here based on your default culture which is @Html.CurrentLocale </h1>
+
View
18 src/Nancy.Demo.Razor.Localization/Views/Index.cshtml
@@ -0,0 +1,18 @@
+@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
+@{
+ Layout = "razor-layout.cshtml";
+}
+
+<h1>The below greeting should be based on your culture:</h1>
+
+<h3>"@Text.Greeting"</h3>
+
+<p>
+ You will see:
+ <br />
+ { "en-GB", "Hello Sir" }
+ <br />
+ { "de-DE", "Guten Tag" }
+ <br />
+ { "en-US", "Howdy Partner" }
+</p>
View
17 src/Nancy.Demo.Razor.Localization/Views/razor-layout.cshtml
@@ -0,0 +1,17 @@
+@inherits Nancy.ViewEngines.Razor.NancyRazorViewBase<dynamic>
+<html>
+<head>
+ <title>Razor Localization Demo</title>
+</head>
+<body>
+ <div id="container">
+ @RenderBody()
+ <br/>
+ <a href="/">Text Resource Example</a>
+ <br/>
+ <a href="/cultureview">Default Culture View Example</a>
+ <br/>
+ <a href="/cultureviewgerman">German Culture View Example</a>
+ </div>
+</body>
+</html>
View
30 src/Nancy.Demo.Razor.Localization/Web.Debug.config
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
+
+<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
+ <!--
+ In the example below, the "SetAttributes" transform will change the value of
+ "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
+ finds an attribute "name" that has a value of "MyDB".
+
+ <connectionStrings>
+ <add name="MyDB"
+ connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
+ xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
+ </connectionStrings>
+ -->
+ <system.web>
+ <!--
+ In the example below, the "Replace" transform will replace the entire
+ <customErrors> section of your web.config file.
+ Note that because there is only one customErrors section under the
+ <system.web> node, there is no need to use the "xdt:Locator" attribute.
+
+ <customErrors defaultRedirect="GenericError.htm"
+ mode="RemoteOnly" xdt:Transform="Replace">
+ <error statusCode="500" redirect="InternalError.htm"/>
+ </customErrors>
+ -->
+ </system.web>
+</configuration>
View
31 src/Nancy.Demo.Razor.Localization/Web.Release.config
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- For more information on using web.config transformation visit http://go.microsoft.com/fwlink/?LinkId=125889 -->
+
+<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
+ <!--
+ In the example below, the "SetAttributes" transform will change the value of
+ "connectionString" to use "ReleaseSQLServer" only when the "Match" locator
+ finds an attribute "name" that has a value of "MyDB".
+
+ <connectionStrings>
+ <add name="MyDB"
+ connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
+ xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
+ </connectionStrings>
+ -->
+ <system.web>
+ <compilation xdt:Transform="RemoveAttributes(debug)" />
+ <!--
+ In the example below, the "Replace" transform will replace the entire
+ <customErrors> section of your web.config file.
+ Note that because there is only one customErrors section under the
+ <system.web> node, there is no need to use the "xdt:Locator" attribute.
+
+ <customErrors defaultRedirect="GenericError.htm"
+ mode="RemoteOnly" xdt:Transform="Replace">
+ <error statusCode="500" redirect="InternalError.htm"/>
+ </customErrors>
+ -->
+ </system.web>
+</configuration>
View
44 src/Nancy.Demo.Razor.Localization/Web.config
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ For more information on how to configure your ASP.NET application, please visit
+ http://go.microsoft.com/fwlink/?LinkId=169433
+ -->
+<configuration>
+ <!--
+ We can override the bootstrapper inside the config if we don't want to rely on the bootstrapper locator.
+ -->
+ <configSections>
+ <section name="razor" type="Nancy.ViewEngines.Razor.RazorConfigurationSection" />
+ </configSections>
+
+ <razor disableAutoIncludeModelNamespace="false">
+ <assemblies>
+ <add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+ <add assembly="Nancy.Hosting.Aspnet" />
+ </assemblies>
+ <namespaces>
+ <add namespace="System.Xml" />
+ </namespaces>
+ </razor>
+ <system.web>
+ <compilation debug="true" targetFramework="4.0" />
+ <httpHandlers>
+ <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
+ </httpHandlers>
+ </system.web>
+ <system.webServer>
+ <modules runAllManagedModulesForAllRequests="true" />
+ <validation validateIntegratedModeConfiguration="false" />
+ <handlers>
+ <add name="Nancy" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" />
+ </handlers>
+ </system.webServer>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+</configuration>
View
1  src/Nancy.Tests/Nancy.Tests.csproj
@@ -231,6 +231,7 @@
<Compile Include="Unit\Validation\ValidationResultFixture.cs" />
<Compile Include="Unit\Validation\DefaultValidatorLocatorFixture.cs" />
<Compile Include="Unit\ViewEngines\DefaultRenderContextFixture.cs" />
+ <Compile Include="Unit\ViewEngines\DefaultTextResourceFixture.cs" />
<Compile Include="Unit\ViewEngines\DefaultViewLocationCacheFixture.cs" />
<Compile Include="Fakes\FakeViewLocationCache.cs" />
<Compile Include="Fakes\FakeViewEngine.cs" />
View
344 src/Nancy.Tests/Unit/Conventions/DefaultViewLocationConventionsFixture.cs
@@ -5,6 +5,8 @@ namespace Nancy.Tests.Unit.Conventions
using Nancy.Conventions;
using Nancy.ViewEngines;
using Xunit;
+ using System.Globalization;
+ using Xunit.Extensions;
public class DefaultViewLocationConventionsFixture
{
@@ -73,7 +75,7 @@ public void Should_return_correct_error_message_when_not_valid_because_view_loca
public void Should_be_valid_when_view_conventions_is_not_empty()
{
// Given
- this.conventions.ViewLocationConventions =
+ this.conventions.ViewLocationConventions =
new List<Func<string, dynamic, ViewLocationContext, string>>
{
(viewName, model, viewLocationContext) => {
@@ -122,24 +124,43 @@ public void Should_define_convention_that_returns_viewname()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[7];
+ var convention = this.conventions.ViewLocationConventions[15];
// When
var result = convention.Invoke(
- "viewname",
- null,
+ "viewname",
+ null,
new ViewLocationContext { ModulePath = string.Empty });
// Then
result.ShouldEqual("viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[14];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = string.Empty, Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_views_folder()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[6];
+ var convention = this.conventions.ViewLocationConventions[13];
// When
var result = convention.Invoke(
@@ -151,12 +172,31 @@ public void Should_define_convention_that_returns_viewname_in_views_folder()
result.ShouldEqual("views/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_views_folder_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[12];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = string.Empty, Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("views/viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulepath_subfolder_of_views_folder()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[2];
+ var convention = this.conventions.ViewLocationConventions[5];
// When
var result = convention.Invoke(
@@ -168,12 +208,31 @@ public void Should_define_convention_that_returns_viewname_in_modulepath_subfold
result.ShouldEqual("views/modulepath/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulepath_subfolder_of_views_folder_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[4];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = "modulepath", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("views/modulepath/viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulepath_subfolder_of_views_folder_when_modulepath_contains_leading_slash()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[2];
+ var convention = this.conventions.ViewLocationConventions[5];
// When
var result = convention.Invoke(
@@ -185,12 +244,31 @@ public void Should_define_convention_that_returns_viewname_in_modulepath_subfold
result.ShouldEqual("views/modulepath/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulepath_subfolder_of_views_folder_when_modulepath_contains_leading_slash_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[4];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = "/modulepath", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("views/modulepath/viewname-", culture));
+ }
+
[Fact]
public void Should_return_empty_result_convention_that_returns_viewname_in_modulepath_subfolder_of_views_folder_when_modulepath_is_empty()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[0];
+ var convention = this.conventions.ViewLocationConventions[1];
// When
var result = convention.Invoke(
@@ -202,12 +280,31 @@ public void Should_return_empty_result_convention_that_returns_viewname_in_modul
result.ShouldEqual(string.Empty);
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_return_empty_result_convention_that_returns_viewname_in_modulepath_subfolder_of_views_folder_when_modulepath_is_empty_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[0];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = string.Empty, Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Empty);
+ }
+
[Fact]
public void Should_return_empty_result_convention_that_returns_viewname_in_modulepath_subfolder_of_views_folder_when_modulepath_is_null()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[0];
+ var convention = this.conventions.ViewLocationConventions[1];
// When
var result = convention.Invoke(
@@ -219,12 +316,31 @@ public void Should_return_empty_result_convention_that_returns_viewname_in_modul
result.ShouldEqual(string.Empty);
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_return_empty_result_convention_that_returns_viewname_in_modulepath_subfolder_of_views_folder_when_modulepath_is_null_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[0];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = null, Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Empty);
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulepath_folder()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[3];
+ var convention = this.conventions.ViewLocationConventions[7];
// When
var result = convention.Invoke(
@@ -236,12 +352,31 @@ public void Should_define_convention_that_returns_viewname_in_modulepath_folder(
result.ShouldEqual("modulepath/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulepath_folder_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[6];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = "modulepath", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("modulepath/viewname-", culture));
+ }
+
[Fact]
public void Should_return_empty_result_for_convention_that_returns_viewname_in_modulepath_folder_when_modulepath_is_empty()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[2];
+ var convention = this.conventions.ViewLocationConventions[5];
// When
var result = convention.Invoke(
@@ -253,12 +388,31 @@ public void Should_return_empty_result_for_convention_that_returns_viewname_in_m
result.ShouldEqual(string.Empty);
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_return_empty_result_for_convention_that_returns_viewname_in_modulepath_folder_when_modulepath_is_empty_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[4];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = string.Empty, Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Empty);
+ }
+
[Fact]
public void Should_return_empty_result_for_convention_that_returns_viewname_in_modulepath_folder_when_modulepath_is_null()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[2];
+ var convention = this.conventions.ViewLocationConventions[5];
// When
var result = convention.Invoke(
@@ -270,12 +424,31 @@ public void Should_return_empty_result_for_convention_that_returns_viewname_in_m
result.ShouldEqual(string.Empty);
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_return_empty_result_for_convention_that_returns_viewname_in_modulepath_folder_when_modulepath_is_null_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[4];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = null, Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Empty);
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulepath_folder_when_modulepath_contains_leading_slash()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[3];
+ var convention = this.conventions.ViewLocationConventions[7];
// When
var result = convention.Invoke(
@@ -287,12 +460,31 @@ public void Should_define_convention_that_returns_viewname_in_modulepath_folder_
result.ShouldEqual("modulepath/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulepath_folder_when_modulepath_contains_leading_slash_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[6];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModulePath = "/modulepath", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("modulepath/viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulename_subfolder_of_views_folder()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[4];
+ var convention = this.conventions.ViewLocationConventions[9];
// When
var result = convention.Invoke(
@@ -304,12 +496,31 @@ public void Should_define_convention_that_returns_viewname_in_modulename_subfold
result.ShouldEqual("views/modulename/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulename_subfolder_of_views_folder_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[8];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModuleName = "modulename", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("views/modulename/viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulename_folder()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[5];
+ var convention = this.conventions.ViewLocationConventions[11];
// When
var result = convention.Invoke(
@@ -321,12 +532,31 @@ public void Should_define_convention_that_returns_viewname_in_modulename_folder(
result.ShouldEqual("modulename/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulename_folder_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[10];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModuleName = "modulename", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("modulename/viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulename_folder_in_modulepath_folder()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[1];
+ var convention = this.conventions.ViewLocationConventions[3];
// When
var result = convention.Invoke(
@@ -338,12 +568,31 @@ public void Should_define_convention_that_returns_viewname_in_modulename_folder_
result.ShouldEqual("modulepath/modulename/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulename_folder_in_modulepath_folder_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[2];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModuleName = "modulename", ModulePath = "modulepath", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("modulepath/modulename/viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulename_folder_in_modulepath_folder_in_views_folder()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[0];
+ var convention = this.conventions.ViewLocationConventions[1];
// When
var result = convention.Invoke(
@@ -355,12 +604,31 @@ public void Should_define_convention_that_returns_viewname_in_modulename_folder_
result.ShouldEqual("views/modulepath/modulename/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulename_folder_in_modulepath_folder_in_views_folder_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[0];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModuleName = "modulename", ModulePath = "modulepath", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("views/modulepath/modulename/viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulename_folder_in_modulepath_folder_when_modulepath_contains_leading_slash()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[1];
+ var convention = this.conventions.ViewLocationConventions[3];
// When
var result = convention.Invoke(
@@ -372,12 +640,31 @@ public void Should_define_convention_that_returns_viewname_in_modulename_folder_
result.ShouldEqual("modulepath/modulename/viewname");
}
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulename_folder_in_modulepath_folder_when_modulepath_contains_leading_slash_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[2];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModuleName = "modulename", ModulePath = "/modulepath", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("modulepath/modulename/viewname-", culture));
+ }
+
[Fact]
public void Should_define_convention_that_returns_viewname_in_modulename_folder_in_modulepath_folder_in_views_folder_when_modulepath_contains_leading_slash()
{
// Given
this.viewLocationConventions.Initialise(this.conventions);
- var convention = this.conventions.ViewLocationConventions[0];
+ var convention = this.conventions.ViewLocationConventions[1];
// When
var result = convention.Invoke(
@@ -388,5 +675,24 @@ public void Should_define_convention_that_returns_viewname_in_modulename_folder_
// Then
result.ShouldEqual("views/modulepath/modulename/viewname");
}
+
+ [Theory]
+ [InlineData("en-GB")]
+ [InlineData("de-DE")]
+ public void Should_define_convention_that_returns_viewname_in_modulename_folder_in_modulepath_folder_in_views_folder_when_modulepath_contains_leading_slash_with_culture(string culture)
+ {
+ // Given
+ this.viewLocationConventions.Initialise(this.conventions);
+ var convention = this.conventions.ViewLocationConventions[0];
+
+ // When
+ var result = convention.Invoke(
+ "viewname",
+ null,
+ new ViewLocationContext { ModuleName = "modulename", ModulePath = "/modulepath", Context = new NancyContext() { Culture = new CultureInfo(culture) } });
+
+ // Then
+ result.ShouldEqual(string.Concat("views/modulepath/modulename/viewname-", culture));
+ }
}
}
View
22 src/Nancy.Tests/Unit/ViewEngines/DefaultTextResourceFixture.cs
@@ -0,0 +1,22 @@
+namespace Nancy.Tests.Unit.ViewEngines
+{
+ using Xunit;
+ using Nancy.Localization;
+
+ public class DefaultTextResourceFixture
+ {
+ [Fact]
+ public void Should_Return_Null_If_No_Assembly_Found()
+ {
+ //Given
+ var defaultTextResource = new ResourceBasedTextResource();
+ var context = new NancyContext();
+
+ //When
+ var result = defaultTextResource["Greeting", context];
+
+ //Then
+ result.ShouldBeNull();
+ }
+ }
+}
View
28 src/Nancy.ViewEngines.Razor.Tests/RazorViewEngineFixture.cs
@@ -1,6 +1,4 @@
-using System.Threading;
-
-namespace Nancy.ViewEngines.Razor.Tests
+namespace Nancy.ViewEngines.Razor.Tests
{
using System;
using System.Dynamic;
@@ -11,6 +9,8 @@ namespace Nancy.ViewEngines.Razor.Tests
using Xunit;
using Nancy.Tests;
using Nancy.ViewEngines.Razor.Tests.Models;
+ using System.Threading;
+ using Nancy.Localization;
public class RazorViewEngineFixture
{
@@ -19,11 +19,13 @@ public class RazorViewEngineFixture
private readonly IRazorConfiguration configuration;
private readonly FileSystemViewLocationProvider fileSystemViewLocationProvider;
private readonly IRootPathProvider rootPathProvider;
+ private readonly ITextResource textResource;
public RazorViewEngineFixture()
{
this.configuration = A.Fake<IRazorConfiguration>();
- this.engine = new RazorViewEngine(this.configuration);
+ this.textResource = A.Fake<ITextResource>();
+ this.engine = new RazorViewEngine(this.configuration, this.textResource);
var cache = A.Fake<IViewCache>();
A.CallTo(() => cache.GetOrAdd(A<ViewLocationResult>.Ignored, A<Func<ViewLocationResult, Func<NancyRazorViewBase>>>.Ignored))
@@ -381,7 +383,8 @@ public void Should_be_able_to_render_view_with_layout_and_optional_section_to_st
}
[Fact]
- public void Should_be_able_to_render_view_with_layout_and_optional_section_with_default_to_stream() {
+ public void Should_be_able_to_render_view_with_layout_and_optional_section_with_default_to_stream()
+ {
//Given
var location = FindView("ViewThatUsesLayoutAndOptionalSectionWithDefaults");
var stream = new MemoryStream();
@@ -398,7 +401,8 @@ public void Should_be_able_to_render_view_with_layout_and_optional_section_to_st
}
[Fact]
- public void Should_be_able_to_render_view_with_layout_and_optional_section_overriding_the_default_to_stream() {
+ public void Should_be_able_to_render_view_with_layout_and_optional_section_overriding_the_default_to_stream()
+ {
//Given
var location = FindView("ViewThatUsesLayoutAndOptionalSectionOverridingDefaults");
var stream = new MemoryStream();
@@ -413,7 +417,7 @@ public void Should_be_able_to_render_view_with_layout_and_optional_section_to_st
"<div>OptionalSectionOverride</div>",
"<div>ViewThatUsesLayoutAndOptionalSectionOverridingDefaults</div>");
}
-
+
[Fact]
public void Should_use_custom_view_base_with_csharp_views()
{
@@ -479,10 +483,10 @@ public void should_work_on_multiple_threads()
string.Empty,
"cshtml",
() =>
- {
- Thread.Sleep(500);
- return new StringReader(@"@{var x = ""test"";}<h1>Hello Mr. @x</h1>");
- });
+ {
+ Thread.Sleep(500);
+ return new StringReader(@"@{var x = ""test"";}<h1>Hello Mr. @x</h1>");
+ });
var wait = new ManualResetEvent(false);
@@ -497,7 +501,7 @@ public void should_work_on_multiple_threads()
});
var response = this.engine.RenderView(location, null, this.renderContext);
response.Contents.Invoke(stream);
-
+
wait.WaitOne(1000).ShouldBeTrue();
// Then
View
8 src/Nancy.ViewEngines.Razor/HtmlHelpers.cs
@@ -94,5 +94,13 @@ public IHtmlString AntiForgeryToken()
return new NonEncodedHtmlString(String.Format("<input type=\"hidden\" name=\"{0}\" value=\"{1}\"/>", tokenKeyValue.Key, tokenKeyValue.Value));
}
+
+ /// <summary>
+ /// Returns current culture name
+ /// </summary>
+ public string CurrentLocale
+ {
+ get { return this.RenderContext.Context.Culture.Name; }
+ }
}
}
View
1  src/Nancy.ViewEngines.Razor/Nancy.ViewEngines.Razor.csproj
@@ -126,6 +126,7 @@
<Compile Include="RazorConfigurationSection.cs" />
<Compile Include="RazorViewEngine.cs" />
<Compile Include="RazorViewEngineApplicationStartupRegistrations.cs" />
+ <Compile Include="TextResourceFinder.cs" />
<Compile Include="UrlHelpers.cs" />
<Compile Include="VisualBasic\NancyVisualBasicRazorCodeParser.cs" />
<Compile Include="VisualBasic\NancyVisualBasicRazorCodeGenerator.cs" />
View
10 src/Nancy.ViewEngines.Razor/NancyRazorViewBase.cs
@@ -78,13 +78,19 @@ public bool HasLayout
public abstract void Execute();
/// <summary>
+ /// Used to retun text resources
+ /// </summary>
+ public dynamic Text { get; set; }
+
+ /// <summary>
/// Initializes the specified engine.
/// </summary>
/// <param name="engine">The engine.</param>
/// <param name="renderContext">The render context.</param>
/// <param name="model">The model.</param>
public virtual void Initialize(RazorViewEngine engine, IRenderContext renderContext, object model)
- { }
+ {
+ }
/// <summary>
/// Initializes a new instance of the <see cref="NancyRazorViewBase"/> class.
@@ -273,6 +279,8 @@ private static string HtmlEncode(object value)
}
}
+
+
/// <summary>
/// A strongly-typed view base.
/// </summary>
View
23 src/Nancy.ViewEngines.Razor/RazorViewEngine.cs
@@ -9,9 +9,9 @@
using System.Reflection;
using System.Web.Razor;
using System.Web.Razor.Parser.SyntaxTree;
-
using Nancy.Bootstrapper;
using Nancy.Responses;
+ using Nancy.Localization;
/// <summary>
/// View engine for rendering razor views.
@@ -19,6 +19,7 @@
public class RazorViewEngine : IViewEngine, IDisposable
{
private readonly IRazorConfiguration razorConfiguration;
+ private readonly ITextResource textResource;
private readonly IEnumerable<IRazorViewRenderer> viewRenderers;
private readonly object compileLock = new object();
@@ -36,7 +37,8 @@ public IEnumerable<string> Extensions
/// Initializes a new instance of the <see cref="RazorViewEngine"/> class.
/// </summary>
/// <param name="configuration">The <see cref="IRazorConfiguration"/> that should be used by the engine.</param>
- public RazorViewEngine(IRazorConfiguration configuration)
+ /// <param name="textResource">The <see cref="ITextResource"/> that should be used by the engine.</param>
+ public RazorViewEngine(IRazorConfiguration configuration, ITextResource textResource)
{
this.viewRenderers = new List<IRazorViewRenderer>
{
@@ -45,6 +47,7 @@ public RazorViewEngine(IRazorConfiguration configuration)
};
this.razorConfiguration = configuration;
+ this.textResource = textResource;
}
/// <summary>
@@ -131,7 +134,7 @@ private Func<NancyRazorViewBase> GetCompiledViewFactory(string extension, TextRe
var engine = this.GetRazorTemplateEngine(renderer.Host);
- var razorResult = engine.GenerateCode(reader, sourceFileName:"placeholder");
+ var razorResult = engine.GenerateCode(reader, sourceFileName: "placeholder");
var viewFactory = this.GenerateRazorViewFactory(renderer.Provider, razorResult, referencingAssembly, renderer.Assemblies, passedModelType, viewLocationResult);
@@ -227,10 +230,10 @@ private Func<NancyRazorViewBase> GenerateRazorViewFactory(CodeDomProvider codePr
private static string BuildErrorMessages(IEnumerable<CompilerError> errors)
{
return errors.Select(error => String.Format(
- "[{0}] Line: {1} Column: {2} - {3} (<a class='LineLink' href='#{1}'>show</a>)",
- error.ErrorNumber,
- error.Line,
- error.Column,
+ "[{0}] Line: {1} Column: {2} - {3} (<a class='LineLink' href='#{1}'>show</a>)",
+ error.ErrorNumber,
+ error.Line,
+ error.Column,
error.ErrorText)).Aggregate((s1, s2) => s1 + "<br/>" + s2);
}
@@ -342,6 +345,8 @@ private NancyRazorViewBase GetOrCompileView(ViewLocationResult viewLocationResul
var view = viewFactory.Invoke();
+ view.Text = new TextResourceFinder(this.textResource, renderContext.Context);
+
view.Code = string.Empty;
return view;
@@ -349,9 +354,9 @@ private NancyRazorViewBase GetOrCompileView(ViewLocationResult viewLocationResul
private NancyRazorViewBase GetViewInstance(ViewLocationResult viewLocationResult, IRenderContext renderContext, Assembly referencingAssembly, dynamic model)
{
- var modelType = (model == null) ? null : model.GetType();
+ var modelType = (model == null) ? null : model.GetType();
- var view =
+ var view =
this.GetOrCompileView(viewLocationResult, renderContext, referencingAssembly, modelType);
view.Initialize(this, renderContext, model);
View
2  src/Nancy.ViewEngines.Razor/RazorViewEngineApplicationStartupRegistrations.cs
@@ -13,7 +13,7 @@ public class RazorViewEngineApplicationRegistrations : IApplicationRegistrations
/// </summary>
public IEnumerable<TypeRegistration> TypeRegistrations
{
- get { return new[] { new TypeRegistration(typeof(IRazorConfiguration), typeof(DefaultRazorConfiguration)) }; }
+ get { return new[] { new TypeRegistration(typeof(IRazorConfiguration), typeof(DefaultRazorConfiguration)), }; }
}
/// <summary>
View
37 src/Nancy.ViewEngines.Razor/TextResourceFinder.cs
@@ -0,0 +1,37 @@
+namespace Nancy.ViewEngines.Razor
+{
+ using System.Dynamic;
+ using Nancy.Localization;
+
+ /// <summary>
+ /// Returns text from an implemented ITextResource
+ /// </summary>
+ public class TextResourceFinder : DynamicObject
+ {
+ private readonly ITextResource textResource;
+ private readonly NancyContext context;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TextResourceFinder"/> class.
+ /// </summary>
+ /// <param name="textResource">The <see cref="ITextResource"/> that should be used by the TextResourceFinder</param>
+ /// <param name="context">The <see cref="NancyContext"/> that should be used by the TextResourceFinder</param>
+ public TextResourceFinder(ITextResource textResource, NancyContext context)
+ {
+ this.textResource = textResource;
+ this.context = context;
+ }
+
+ /// <summary>
+ /// Finds text resource
+ /// </summary>
+ /// <param name="binder">GetMemberBinder with dynamic text key</param>
+ /// <param name="result">Text item</param>
+ /// <returns>Returns a value or a non existing value from the <see cref="ITextResource"/> implementation</returns>
+ public override bool TryGetMember(GetMemberBinder binder, out object result)
+ {
+ result = this.textResource[binder.Name, this.context];
+ return true;
+ }
+ }
+}
View
403 src/Nancy.sln
@@ -103,584 +103,986 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nancy.Demo.Authentication.S
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nancy.Demo.Authentication.Stateless", "Nancy.Demo.Authentication.Stateless\Nancy.Demo.Authentication.Stateless.csproj", "{BAE74CD5-57C2-40E3-8F7A-EDE5721C2ACC}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nancy.Demo.Razor.Localization", "Nancy.Demo.Razor.Localization\Nancy.Demo.Razor.Localization.csproj", "{396F0BCE-5B51-4B6A-931E-312880C24725}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|x86 = Debug|x86
MonoDebug|Any CPU = MonoDebug|Any CPU
+ MonoDebug|Mixed Platforms = MonoDebug|Mixed Platforms
MonoDebug|x86 = MonoDebug|x86
MonoRelease|Any CPU = MonoRelease|Any CPU
+ MonoRelease|Mixed Platforms = MonoRelease|Mixed Platforms
MonoRelease|x86 = MonoRelease|x86
Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.Debug|x86.ActiveCfg = Debug|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {34576216-0DCA-4B0F-A0DC-9075E75A676F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{34576216-0DCA-4B0F-A0DC-9075E75A676F}.Release|x86.ActiveCfg = Release|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Debug|x86.ActiveCfg = Debug|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
+ {8B7EC9F2-44D2-426C-AE7F-801DC3238259}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {8B7EC9F2-44D2-426C-AE7F-801DC3238259}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
+ {8B7EC9F2-44D2-426C-AE7F-801DC3238259}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {8B7EC9F2-44D2-426C-AE7F-801DC3238259}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{8B7EC9F2-44D2-426C-AE7F-801DC3238259}.Release|x86.ActiveCfg = Release|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Debug|x86.ActiveCfg = Debug|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2C6F51DF-015C-4DB6-B44C-0E5E4F25E2A9}.Release|x86.ActiveCfg = Release|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4B7E35DF-1569-4346-B180-A09615723095}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {4B7E35DF-1569-4346-B180-A09615723095}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.Debug|x86.ActiveCfg = Debug|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {4B7E35DF-1569-4346-B180-A09615723095}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {4B7E35DF-1569-4346-B180-A09615723095}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {4B7E35DF-1569-4346-B180-A09615723095}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {4B7E35DF-1569-4346-B180-A09615723095}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4B7E35DF-1569-4346-B180-A09615723095}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {4B7E35DF-1569-4346-B180-A09615723095}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{4B7E35DF-1569-4346-B180-A09615723095}.Release|x86.ActiveCfg = Release|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Debug|x86.ActiveCfg = Debug|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{15B7F794-0BB2-4B66-AD78-4A951F1209B2}.Release|x86.ActiveCfg = Release|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Debug|x86.ActiveCfg = Debug|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{E8B18958-7C8A-4FBA-AF00-3041C34A20CE}.Release|x86.ActiveCfg = Release|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Debug|x86.ActiveCfg = Debug|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{AA7F66EB-EC2C-47DE-855F-30B3E6EF2134}.Release|x86.ActiveCfg = Release|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Debug|x86.ActiveCfg = Debug|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Release|Any CPU.ActiveCfg = Release|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Release|Any CPU.Build.0 = Release|Any CPU
+ {500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{500B28EA-BFDB-4686-8A7D-5CA38B11EF21}.Release|x86.ActiveCfg = Release|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Debug|x86.ActiveCfg = Debug|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D79203C0-B672-4751-9C95-C3AB7D3FEFBE}.Release|x86.ActiveCfg = Release|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Debug|x86.ActiveCfg = Debug|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B795886D-9D70-45B1-BFB5-AD54CBC9A447}.Release|x86.ActiveCfg = Release|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BD72B98D-C81A-4013-B606-94B4BA2273E5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {BD72B98D-C81A-4013-B606-94B4BA2273E5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.Debug|x86.ActiveCfg = Debug|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BD72B98D-C81A-4013-B606-94B4BA2273E5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {BD72B98D-C81A-4013-B606-94B4BA2273E5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BD72B98D-C81A-4013-B606-94B4BA2273E5}.Release|x86.ActiveCfg = Release|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Debug|x86.ActiveCfg = Debug|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{776D244D-BC4D-4BBB-A478-CAF2D04520E1}.Release|x86.ActiveCfg = Release|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3D44A461-3133-4B49-A74B-D25632A12FE5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {3D44A461-3133-4B49-A74B-D25632A12FE5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.Debug|x86.ActiveCfg = Debug|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
+ {3D44A461-3133-4B49-A74B-D25632A12FE5}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {3D44A461-3133-4B49-A74B-D25632A12FE5}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
+ {3D44A461-3133-4B49-A74B-D25632A12FE5}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {3D44A461-3133-4B49-A74B-D25632A12FE5}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3D44A461-3133-4B49-A74B-D25632A12FE5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {3D44A461-3133-4B49-A74B-D25632A12FE5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{3D44A461-3133-4B49-A74B-D25632A12FE5}.Release|x86.ActiveCfg = Release|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FE32460D-547C-4EB9-A768-541255CCAA83}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {FE32460D-547C-4EB9-A768-541255CCAA83}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.Debug|x86.ActiveCfg = Debug|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {FE32460D-547C-4EB9-A768-541255CCAA83}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {FE32460D-547C-4EB9-A768-541255CCAA83}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {FE32460D-547C-4EB9-A768-541255CCAA83}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {FE32460D-547C-4EB9-A768-541255CCAA83}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FE32460D-547C-4EB9-A768-541255CCAA83}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {FE32460D-547C-4EB9-A768-541255CCAA83}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{FE32460D-547C-4EB9-A768-541255CCAA83}.Release|x86.ActiveCfg = Release|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Debug|x86.ActiveCfg = Debug|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{06F89662-C2F0-4C1D-8581-E0C4A615B7E2}.Release|x86.ActiveCfg = Release|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Debug|x86.ActiveCfg = Debug|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{D0F1D7F4-0D48-49AE-9E33-005926B58B1D}.Release|x86.ActiveCfg = Release|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4E974051-38C2-4B5D-A6B1-F265A428A673}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {4E974051-38C2-4B5D-A6B1-F265A428A673}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.Debug|x86.ActiveCfg = Debug|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4E974051-38C2-4B5D-A6B1-F265A428A673}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {4E974051-38C2-4B5D-A6B1-F265A428A673}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{4E974051-38C2-4B5D-A6B1-F265A428A673}.Release|x86.ActiveCfg = Release|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Debug|x86.ActiveCfg = Debug|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{12BDFB8B-29BD-4F0F-890F-983F1F9F77EE}.Release|x86.ActiveCfg = Release|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8EB9E15A-4B65-4C80-B834-9A7773750666}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {8EB9E15A-4B65-4C80-B834-9A7773750666}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.Debug|x86.ActiveCfg = Debug|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8EB9E15A-4B65-4C80-B834-9A7773750666}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {8EB9E15A-4B65-4C80-B834-9A7773750666}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{8EB9E15A-4B65-4C80-B834-9A7773750666}.Release|x86.ActiveCfg = Release|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Debug|x86.ActiveCfg = Debug|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{A3BF6450-DE9A-4C11-8E3C-66D9A8EC93F5}.Release|x86.ActiveCfg = Release|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Debug|x86.ActiveCfg = Debug|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2026DD2D-E041-4A14-8A04-D5B39B8B7C40}.Release|x86.ActiveCfg = Release|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Debug|x86.ActiveCfg = Debug|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BDA5E175-07D7-4E6F-B46F-C2CF7D63E231}.Release|x86.ActiveCfg = Release|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Debug|x86.ActiveCfg = Debug|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{5F2DD52D-471B-4946-8F7B-F050C88EFC52}.Release|x86.ActiveCfg = Release|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Debug|x86.ActiveCfg = Debug|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{98940A30-1B48-4F71-A6BA-85F0AAF31A2F}.Release|x86.ActiveCfg = Release|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Debug|x86.ActiveCfg = Debug|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{EF660223-4DFD-4E36-BF36-9DD6AFB3F837}.Release|x86.ActiveCfg = Release|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Debug|x86.ActiveCfg = Debug|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Release|Any CPU.ActiveCfg = Release|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Release|Any CPU.Build.0 = Release|Any CPU
+ {28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{28F9EA8B-90F7-4974-BB40-0B7FA9309D02}.Release|x86.ActiveCfg = Release|Any CPU
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Debug|Any CPU.ActiveCfg = Debug|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Debug|Any CPU.Build.0 = Debug|x86
+ {0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Debug|Mixed Platforms.Build.0 = Debug|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Debug|x86.ActiveCfg = Debug|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Debug|x86.Build.0 = Debug|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoDebug|Any CPU.Build.0 = MonoDebug|x86
+ {0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|x86
+ {0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoDebug|x86.ActiveCfg = MonoDebug|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoDebug|x86.Build.0 = MonoDebug|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoRelease|Any CPU.Build.0 = MonoRelease|x86
+ {0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|x86
+ {0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoRelease|x86.ActiveCfg = MonoRelease|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.MonoRelease|x86.Build.0 = MonoRelease|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Release|Any CPU.ActiveCfg = Release|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Release|Any CPU.Build.0 = Release|x86
+ {0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Release|Mixed Platforms.Build.0 = Release|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Release|x86.ActiveCfg = Release|x86
{0B3EA40E-F7D8-4E14-A30F-1536F41B62D1}.Release|x86.Build.0 = Release|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.Debug|Any CPU.ActiveCfg = Debug|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.Debug|Any CPU.Build.0 = Debug|x86
+ {EBB6F597-3273-4972-8B25-A809D2FC1F24}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
+ {EBB6F597-3273-4972-8B25-A809D2FC1F24}.Debug|Mixed Platforms.Build.0 = Debug|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.Debug|x86.ActiveCfg = Debug|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.Debug|x86.Build.0 = Debug|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|x86
+ {EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|x86
+ {EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoDebug|x86.ActiveCfg = MonoDebug|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoDebug|x86.Build.0 = MonoDebug|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|x86
+ {EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|x86
+ {EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoRelease|x86.ActiveCfg = MonoRelease|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.MonoRelease|x86.Build.0 = MonoRelease|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.Release|Any CPU.ActiveCfg = Release|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.Release|Any CPU.Build.0 = Release|x86
+ {EBB6F597-3273-4972-8B25-A809D2FC1F24}.Release|Mixed Platforms.ActiveCfg = Release|x86
+ {EBB6F597-3273-4972-8B25-A809D2FC1F24}.Release|Mixed Platforms.Build.0 = Release|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.Release|x86.ActiveCfg = Release|x86
{EBB6F597-3273-4972-8B25-A809D2FC1F24}.Release|x86.Build.0 = Release|x86
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Debug|x86.ActiveCfg = Debug|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{E127FED3-01C0-41BA-BF83-D8DCDD827D6A}.Release|x86.ActiveCfg = Release|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Debug|x86.ActiveCfg = Debug|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{7959D79C-9E2B-4871-9470-6A6B527ABE5E}.Release|x86.ActiveCfg = Release|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Debug|x86.ActiveCfg = Debug|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{948A8EF6-D50C-45EA-9AFD-7A4723ADAB0B}.Release|x86.ActiveCfg = Release|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1258BFCD-3BAD-4373-B786-4D698EC3C157}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {1258BFCD-3BAD-4373-B786-4D698EC3C157}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.Debug|x86.ActiveCfg = Debug|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoDebug|Any CPU.ActiveCfg = MonoDebug|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoDebug|Any CPU.Build.0 = MonoDebug|Any CPU
+ {1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoDebug|Mixed Platforms.ActiveCfg = MonoDebug|Any CPU
+ {1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoDebug|Mixed Platforms.Build.0 = MonoDebug|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoDebug|x86.ActiveCfg = MonoDebug|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoRelease|Any CPU.ActiveCfg = MonoRelease|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoRelease|Any CPU.Build.0 = MonoRelease|Any CPU
+ {1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoRelease|Mixed Platforms.ActiveCfg = MonoRelease|Any CPU
+ {1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoRelease|Mixed Platforms.Build.0 = MonoRelease|Any CPU
{1258BFCD-3BAD-4373-B786-4D698EC3C157}.MonoRelease|x86.ActiveCfg = MonoRelease|Any CPU