Updating the Update module for Media Library migration

--HG--
branch : 1.x
rename : src/Orchard.Web/Modules/UpgradeTo16/AdminMenu.cs => src/Orchard.Web/Modules/Upgrade/AdminMenu.cs
rename : src/Orchard.Web/Modules/UpgradeTo16/Controllers/FieldController.cs => src/Orchard.Web/Modules/Upgrade/Controllers/FieldController.cs
rename : src/Orchard.Web/Modules/UpgradeTo16/Controllers/MenuController.cs => src/Orchard.Web/Modules/Upgrade/Controllers/MenuController.cs
rename : src/Orchard.Web/Modules/UpgradeTo16/Controllers/RouteController.cs => src/Orchard.Web/Modules/Upgrade/Controllers/RouteController.cs
rename : src/Orchard.Web/Modules/UpgradeTo16/Module.txt => src/Orchard.Web/Modules/Upgrade/Module.txt
rename : src/Orchard.Web/Modules/UpgradeTo16/Properties/AssemblyInfo.cs => src/Orchard.Web/Modules/Upgrade/Properties/AssemblyInfo.cs
rename : src/Orchard.Web/Modules/UpgradeTo16/Scripts/Web.config => src/Orchard.Web/Modules/Upgrade/Scripts/Web.config
rename : src/Orchard.Web/Modules/UpgradeTo16/Styles/Web.config => src/Orchard.Web/Modules/Upgrade/Styles/Web.config
rename : src/Orchard.Web/Modules/UpgradeTo16/ViewModels/MigrateViewModel.cs => src/Orchard.Web/Modules/Upgrade/ViewModels/MigrateViewModel.cs
rename : src/Orchard.Web/Modules/UpgradeTo16/Views/Field/Index.cshtml => src/Orchard.Web/Modules/Upgrade/Views/Field/Index.cshtml
rename : src/Orchard.Web/Modules/UpgradeTo16/Views/Menu/Index.cshtml => src/Orchard.Web/Modules/Upgrade/Views/Menu/Index.cshtml
rename : src/Orchard.Web/Modules/UpgradeTo16/Views/Route/Index.cshtml => src/Orchard.Web/Modules/Upgrade/Views/Route/Index.cshtml
rename : src/Orchard.Web/Modules/UpgradeTo16/Views/Web.config => src/Orchard.Web/Modules/Upgrade/Views/Web.config
rename : src/Orchard.Web/Modules/UpgradeTo16/Web.config => src/Orchard.Web/Modules/Upgrade/Web.config
extra : rebase_source : afbb67180f7c261112b504d0fd2f53d1ac8f2e13
This commit is contained in:
Sebastien Ros
2013-06-21 11:54:57 -07:00
parent ab3c3afbdb
commit ab5153ea8b
22 changed files with 269 additions and 60 deletions

View File

@@ -0,0 +1,24 @@
using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Navigation;
namespace Upgrade {
public class AdminMenu : INavigationProvider {
public Localizer T { get; set; }
public string MenuName {
get { return "admin"; }
}
public void GetNavigation(NavigationBuilder builder) {
builder
.Add(T("Upgrade to 1.7"), "0", menu => menu.Action("Index", "Route", new { area = "Upgrade" })
.Add(T("Migrate Media"), "1", item => item.Action("Index", "Media", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner))
.Add(T("Migrate Taxonomies"), "2", item => item.Action("Index", "Taxonomy", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner))
.Add(T("Migrate Routes"), "3", item => item.Action("Index", "Route", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner))
.Add(T("Migrate Fields"), "4", item => item.Action("Index", "Field", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner))
.Add(T("Migrate Menu"), "5", item => item.Action("Index", "Menu", new { area = "Upgrade" }).LocalNav().Permission(StandardPermissions.SiteOwner))
);
}
}
}

View File

@@ -9,9 +9,9 @@ using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Admin;
using Orchard.UI.Notify;
using UpgradeTo16.ViewModels;
using Upgrade.ViewModels;
namespace UpgradeTo16.Controllers {
namespace Upgrade.Controllers {
[Admin]
public class FieldController : Controller {
private readonly IContentDefinitionManager _contentDefinitionManager;

View File

@@ -0,0 +1,112 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Web.Mvc;
using Orchard;
using Orchard.Environment.Features;
using Orchard.Localization;
using Orchard.Logging;
using Orchard.Media.Models;
using Orchard.Media.Services;
using Orchard.MediaLibrary.Models;
using Orchard.MediaLibrary.Services;
using Orchard.Security;
using Orchard.UI.Admin;
using Orchard.UI.Notify;
using MediaFolder = Orchard.Media.Models.MediaFolder;
using Orchard.Mvc.Extensions;
namespace Upgrade.Controllers {
[Admin]
public class MediaController : Controller {
private readonly IOrchardServices _orchardServices;
private readonly IFeatureManager _featureManager;
private readonly IMediaService _mediaService;
private readonly IMediaLibraryService _mediaLibraryService;
public MediaController(
IOrchardServices orchardServices,
IFeatureManager featureManager,
IMediaService mediaService,
IMediaLibraryService mediaLibraryService) {
_orchardServices = orchardServices;
_featureManager = featureManager;
_mediaService = mediaService;
_mediaLibraryService = mediaLibraryService;
Logger = NullLogger.Instance;
}
public Localizer T { get; set; }
public ILogger Logger { get; set; }
public ActionResult Index() {
if(_featureManager.GetEnabledFeatures().All(x => x.Id != "Orchard.MediaLibrary")) {
_orchardServices.Notifier.Warning(T("You need to enable Orchard.MediaLibrary in order to convert current media files to the Media Library."));
}
return View();
}
[HttpPost, ActionName("Index")]
public ActionResult IndexPOST() {
if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not allowed to convert media files.")))
return new HttpUnauthorizedResult();
// crawl media file, ignore recipes
IEnumerable<MediaFolder> mediaFolders = _mediaService.GetMediaFolders(null);
foreach (var mediaFolder in mediaFolders) {
ImportMediaFolder(mediaFolder, null);
}
_orchardServices.Notifier.Information(T("Media files were migrated successfully."));
return RedirectToAction("Index");
}
private void ImportMediaFolder(MediaFolder mediaFolder, Orchard.MediaLibrary.Models.MediaFolder parentMediaFolder) {
// create the folder in Media Library
int? parentMediaFolderId = parentMediaFolder != null ? (int?)parentMediaFolder.TermId : null;
var mediaLibraryFolder = _mediaLibraryService.CreateFolder(parentMediaFolderId, mediaFolder.Name);
foreach (var mediaFile in _mediaService.GetMediaFiles(mediaFolder.MediaPath)) {
ImportMediaFile(mediaFile, mediaLibraryFolder);
}
// recursive call on sub-folders
foreach (var subMediaFolder in _mediaService.GetMediaFolders(mediaFolder.MediaPath)) {
ImportMediaFolder(subMediaFolder, mediaLibraryFolder);
}
}
private void ImportMediaFile(MediaFile mediaFile, Orchard.MediaLibrary.Models.MediaFolder mediaLibraryFolder) {
// foreach media file, if there is no media with the same url, import it
var contentManager = _orchardServices.ContentManager;
var media = contentManager.Query().ForPart<MediaPart>().Where<MediaPartRecord>(x => x.Resource.EndsWith(mediaFile.MediaPath)).Slice(0, 1).FirstOrDefault();
if (media != null) {
_orchardServices.Notifier.Information(T("Media {0} has already been imported.", mediaFile.MediaPath));
return;
}
try {
_orchardServices.Notifier.Information(T("Importing {0}.", mediaFile.MediaPath));
var url = _mediaService.GetPublicUrl(mediaFile.MediaPath);
url = Url.MakeAbsolute(url);
var buffer = new WebClient().DownloadData(url);
var stream = new MemoryStream(buffer);
var mediaPart = _mediaLibraryService.ImportStream(mediaLibraryFolder.TermId, stream, Path.GetFileName(url));
}
catch(Exception e) {
_orchardServices.Notifier.Error(T("Error while importing {0}. Please check the logs", mediaFile.MediaPath));
Logger.Error(e, "Error while importing {0}", mediaFile.MediaPath);
}
}
}
}

View File

@@ -11,7 +11,7 @@ using Orchard.UI.Notify;
using Orchard.Widgets.Models;
using Orchard.Widgets.Services;
namespace UpgradeTo16.Controllers {
namespace Upgrade.Controllers {
[Admin]
public class MenuController : Controller {
private readonly IMenuService _menuService;

View File

@@ -18,9 +18,9 @@ using Orchard.Reports.Services;
using Orchard.Security;
using Orchard.UI.Admin;
using Orchard.UI.Notify;
using UpgradeTo16.ViewModels;
using Upgrade.ViewModels;
namespace UpgradeTo16.Controllers {
namespace Upgrade.Controllers {
[Admin]
public class RouteController : Controller {
private readonly IContentDefinitionManager _contentDefinitionManager;
@@ -73,7 +73,7 @@ namespace UpgradeTo16.Controllers {
if(TryUpdateModel(viewModel)) {
// creating report
_reportsCoordinator.Register("Migration", "UpgradeTo16", "Migrating " + string.Join(" ,", viewModel.ContentTypes.Where(x => x.IsChecked).Select(x => x.ContentTypeName).ToArray()));
_reportsCoordinator.Register("Migration", "Upgrade", "Migrating " + string.Join(" ,", viewModel.ContentTypes.Where(x => x.IsChecked).Select(x => x.ContentTypeName).ToArray()));
var contentTypesToMigrate = viewModel.ContentTypes.Where(c => c.IsChecked).Select(c => c.ContentTypeName);

View File

@@ -0,0 +1,50 @@
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using Orchard;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData;
using Orchard.Environment.Features;
using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Admin;
using Orchard.UI.Notify;
using Upgrade.ViewModels;
namespace Upgrade.Controllers {
[Admin]
public class TaxonomyController : Controller {
private readonly IContentDefinitionManager _contentDefinitionManager;
private readonly IOrchardServices _orchardServices;
private readonly IFeatureManager _featureManager;
public TaxonomyController(
IContentDefinitionManager contentDefinitionManager,
IOrchardServices orchardServices,
IFeatureManager featureManager) {
_contentDefinitionManager = contentDefinitionManager;
_orchardServices = orchardServices;
_featureManager = featureManager;
}
public Localizer T { get; set; }
public ActionResult Index() {
if(!_featureManager.GetEnabledFeatures().Any(x => x.Id == "Orchard.Taxonomies")) {
_orchardServices.Notifier.Warning(T("You need to enable Orchard.Taxonomies in order to migrate Contrib.Taxonomies to Orchard.Taxonomies."));
}
return View();
}
[HttpPost, ActionName("Index")]
public ActionResult IndexPOST() {
if (!_orchardServices.Authorizer.Authorize(StandardPermissions.SiteOwner, T("Not allowed to migrate Contrib.Taxonomies.")))
return new HttpUnauthorizedResult();
_orchardServices.Notifier.Information(T("Taxonomies were migrated successfully."));
return RedirectToAction("Index");
}
}
}

View File

@@ -0,0 +1,12 @@
Name: Upgrade
AntiForgery: enabled
Author: The Orchard Team
Website: http://orchardproject.net
Version: 1.7
OrchardVersion: 1.7
Description: Provides actions for upgrading Orchard instances
Category: Developer
Features:
Upgrade:
Description: Provides actions for upgrading Orchard instances
Dependencies: Orchard.Autoroute, Title, Navigation

View File

@@ -6,7 +6,7 @@ using System.Security;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("UpgradeTo16")]
[assembly: AssemblyTitle("Upgrade")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("Orchard")]

View File

@@ -10,8 +10,8 @@
<ProjectTypeGuids>{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>UpgradeTo16</RootNamespace>
<AssemblyName>UpgradeTo16</AssemblyName>
<RootNamespace>Upgrade</RootNamespace>
<AssemblyName>Upgrade</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<MvcBuildViews>false</MvcBuildViews>
<FileUpgradeFlags>
@@ -69,6 +69,8 @@
<Content Include="Views\Web.config" />
<Content Include="Scripts\Web.config" />
<Content Include="Styles\Web.config" />
<Compile Include="Controllers\TaxonomyController.cs" />
<Compile Include="Controllers\MediaController.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="Module.txt" />
</ItemGroup>
@@ -89,6 +91,14 @@
<Project>{66FCCD76-2761-47E3-8D11-B45D0001DDAA}</Project>
<Name>Orchard.Autoroute</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.MediaLibrary\Orchard.MediaLibrary.csproj">
<Project>{73a7688a-5bd3-4f7e-adfa-ce36c5a10e3b}</Project>
<Name>Orchard.MediaLibrary</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Media\Orchard.Media.csproj">
<Project>{d9a7b330-cd22-4da1-a95a-8de1982ad8eb}</Project>
<Name>Orchard.Media</Name>
</ProjectReference>
<ProjectReference Include="..\Orchard.Widgets\Orchard.Widgets.csproj">
<Project>{194D3CCC-1153-474D-8176-FDE8D7D0D0BD}</Project>
<Name>Orchard.Widgets</Name>
@@ -111,6 +121,12 @@
<ItemGroup>
<Content Include="Views\Menu\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Media\Index.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Taxonomy\Index.cshtml" />
</ItemGroup>
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>

View File

@@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace UpgradeTo16.ViewModels {
namespace Upgrade.ViewModels {
public class MigrateViewModel {
public IList<ContentTypeEntry> ContentTypes { get; set; }
}

View File

@@ -1,5 +1,5 @@
@using Orchard.Utility.Extensions
@model UpgradeTo16.ViewModels.MigrateViewModel
@model Upgrade.ViewModels.MigrateViewModel
@{ Layout.Title = T("Migrate Fields").ToString(); }

View File

@@ -0,0 +1,14 @@
@using Orchard.Utility.Extensions
@{ Layout.Title = T("Migrate Media Files").ToString(); }
@using (Html.BeginFormAntiForgeryPost()) {
Html.ValidationSummary();
<fieldset>
<legend>@T("Migrating Media Files:")</legend>
<span class="hint">@T("This migration step will create and organize new Media Content Items based on the media files in your ~/Media folder.")</span>
</fieldset>
<fieldset>
<button type="submit">@T("Migrate")</button>
</fieldset>
}

View File

@@ -1,5 +1,5 @@
@using Orchard.Utility.Extensions
@model UpgradeTo16.ViewModels.MigrateViewModel
@model Upgrade.ViewModels.MigrateViewModel
@{ Layout.Title = T("Migrate Routes").ToString(); }

View File

@@ -0,0 +1,14 @@
@using Orchard.Utility.Extensions
@{ Layout.Title = T("Migrate Media Files").ToString(); }
@using (Html.BeginFormAntiForgeryPost()) {
Html.ValidationSummary();
<fieldset>
<legend>@T("Migrating Media Files:")</legend>
<span class="hint">@T("This migration step will create and organize new Media Content Items based on the media files in your ~/Media folder.")</span>
</fieldset>
<fieldset>
<button type="submit">@T("Migrate")</button>
</fieldset>
}

View File

@@ -33,7 +33,8 @@
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>

View File

@@ -1,22 +0,0 @@
using Orchard.Localization;
using Orchard.Security;
using Orchard.UI.Navigation;
namespace UpgradeTo16 {
public class AdminMenu : INavigationProvider {
public Localizer T { get; set; }
public string MenuName {
get { return "admin"; }
}
public void GetNavigation(NavigationBuilder builder) {
builder
.Add(T("Upgrade to 1.6"), "0", menu => menu.Action("Index", "Route", new { area = "UpgradeTo16" })
.Add(T("Migrate Routes"), "0", item => item.Action("Index", "Route", new { area = "UpgradeTo16" }).LocalNav().Permission(StandardPermissions.SiteOwner))
.Add(T("Migrate Fields"), "0", item => item.Action("Index", "Field", new { area = "UpgradeTo16" }).LocalNav().Permission(StandardPermissions.SiteOwner))
.Add(T("Migrate Menu"), "0", item => item.Action("Index", "Menu", new { area = "UpgradeTo16" }).LocalNav().Permission(StandardPermissions.SiteOwner))
);
}
}
}

View File

@@ -1,12 +0,0 @@
Name: UpgradeTo16
AntiForgery: enabled
Author: The Orchard Team
Website: http://orchardproject.net
Version: 1.6
OrchardVersion: 1.6
Description: Description for the module
Category: Developer
Features:
UpgradeTo16:
Description: Description for feature UpgradeTo16.
Dependencies: Orchard.Autoroute, Title, Navigation

View File

@@ -142,8 +142,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.ContentPermissions"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SysCache", "Orchard.Web\Modules\SysCache\SysCache.csproj", "{3BD22132-D538-48C6-8854-F71333C798EB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpgradeTo16", "Orchard.Web\Modules\UpgradeTo16\UpgradeTo16.csproj", "{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.Workflows", "Orchard.Web\Modules\Orchard.Workflows\Orchard.Workflows.csproj", "{7059493C-8251-4764-9C1E-2368B8B485BC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.MediaProcessing", "Orchard.Web\Modules\Orchard.MediaProcessing\Orchard.MediaProcessing.csproj", "{08191FCD-7258-4F19-95FB-AEC3DE77B2EB}"
@@ -158,6 +156,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.MediaLibrary", "Orc
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Orchard.OutputCache", "Orchard.Web\Modules\Orchard.OutputCache\Orchard.OutputCache.csproj", "{6E444FF1-A47C-4CF6-BB3F-507C8EBD776D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Upgrade", "Orchard.Web\Modules\Upgrade\Upgrade.csproj", "{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
CodeCoverage|Any CPU = CodeCoverage|Any CPU
@@ -812,16 +812,6 @@ Global
{3BD22132-D538-48C6-8854-F71333C798EB}.FxCop|Any CPU.ActiveCfg = Release|Any CPU
{3BD22132-D538-48C6-8854-F71333C798EB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3BD22132-D538-48C6-8854-F71333C798EB}.Release|Any CPU.Build.0 = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.CodeCoverage|Any CPU.Build.0 = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Coverage|Any CPU.Build.0 = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.FxCop|Any CPU.ActiveCfg = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.FxCop|Any CPU.Build.0 = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Release|Any CPU.Build.0 = Release|Any CPU
{7059493C-8251-4764-9C1E-2368B8B485BC}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU
{7059493C-8251-4764-9C1E-2368B8B485BC}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{7059493C-8251-4764-9C1E-2368B8B485BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -886,6 +876,16 @@ Global
{6E444FF1-A47C-4CF6-BB3F-507C8EBD776D}.FxCop|Any CPU.Build.0 = Release|Any CPU
{6E444FF1-A47C-4CF6-BB3F-507C8EBD776D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E444FF1-A47C-4CF6-BB3F-507C8EBD776D}.Release|Any CPU.Build.0 = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.CodeCoverage|Any CPU.ActiveCfg = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.CodeCoverage|Any CPU.Build.0 = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Coverage|Any CPU.ActiveCfg = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Coverage|Any CPU.Build.0 = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.FxCop|Any CPU.ActiveCfg = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.FxCop|Any CPU.Build.0 = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -939,7 +939,6 @@ Global
{F301EF7D-F19C-4D83-AA94-CB64F29C037D} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{E826F796-8CE3-4B5B-8423-5AA5F81D2FC3} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{3BD22132-D538-48C6-8854-F71333C798EB} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{7059493C-8251-4764-9C1E-2368B8B485BC} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{08191FCD-7258-4F19-95FB-AEC3DE77B2EB} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{5D13EF34-8B39-4EC5-847F-E12892ACF841} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
@@ -947,6 +946,7 @@ Global
{1F0B6B85-8B0B-47CA-899D-F25B4F1B52C3} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{73A7688A-5BD3-4F7E-ADFA-CE36C5A10E3B} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{6E444FF1-A47C-4CF6-BB3F-507C8EBD776D} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{8A9FDB57-342D-49C2-BAFC-D885AAE5CC7C} = {E9C9F120-07BA-4DFB-B9C3-3AFB9D44C9D5}
{ABC826D4-2FA1-4F2F-87DE-E6095F653810} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}
{F112851D-B023-4746-B6B1-8D2E5AD8F7AA} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}
{6CB3EB30-F725-45C0-9742-42599BA8E8D2} = {74E681ED-FECC-4034-B9BD-01B0BB1BDECA}