Roughing in service interfaces and models for shell topology work

Some existing types refactored _Obsolete suffix to indicate it's replaced w/out breaking exising usage

--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-04-14 14:43:57 -07:00
parent 4b24886423
commit 83db3cd3d3
23 changed files with 137 additions and 50 deletions

View File

@@ -37,7 +37,7 @@ namespace Orchard.Tests.Environment {
builder => { builder => {
//builder.RegisterModule(new ImplicitCollectionSupportModule()); //builder.RegisterModule(new ImplicitCollectionSupportModule());
builder.RegisterType<StubContainerProvider>().As<IContainerProvider>().InstancePerLifetimeScope(); builder.RegisterType<StubContainerProvider>().As<IContainerProvider>().InstancePerLifetimeScope();
builder.RegisterType<StubCompositionStrategy>().As<ICompositionStrategy>().InstancePerLifetimeScope(); builder.RegisterType<StubCompositionStrategy>().As<ICompositionStrategy_Obsolete>().InstancePerLifetimeScope();
builder.RegisterType<DefaultOrchardHost>().As<IOrchardHost>().SingleInstance(); builder.RegisterType<DefaultOrchardHost>().As<IOrchardHost>().SingleInstance();
builder.RegisterType<RoutePublisher>().As<IRoutePublisher>(); builder.RegisterType<RoutePublisher>().As<IRoutePublisher>();
builder.RegisterType<ModelBinderPublisher>().As<IModelBinderPublisher>(); builder.RegisterType<ModelBinderPublisher>().As<IModelBinderPublisher>();
@@ -56,14 +56,14 @@ namespace Orchard.Tests.Environment {
} }
public class StubShellSettingsLoader : ITenantManager { public class StubShellSettingsLoader : ITenantManager {
private readonly List<IShellSettings> _shellSettings = new List<IShellSettings> private readonly List<ShellSettings> _shellSettings = new List<ShellSettings>
{new ShellSettings {Name = "testing"}}; {new ShellSettings {Name = "testing"}};
public IEnumerable<IShellSettings> LoadSettings() { public IEnumerable<ShellSettings> LoadSettings() {
return _shellSettings.AsEnumerable(); return _shellSettings.AsEnumerable();
} }
public void SaveSettings(IShellSettings settings) { public void SaveSettings(ShellSettings settings) {
_shellSettings.Add(settings); _shellSettings.Add(settings);
} }
} }
@@ -77,7 +77,7 @@ namespace Orchard.Tests.Environment {
return Enumerable.Empty<ExtensionEntry>(); return Enumerable.Empty<ExtensionEntry>();
} }
public ShellTopology GetExtensionsTopology() { public ShellTopology_Obsolete GetExtensionsTopology() {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@@ -99,7 +99,7 @@ namespace Orchard.Tests.Environment {
Assert.That(_controllerBuilder.GetControllerFactory(), Is.TypeOf<OrchardControllerFactory>()); Assert.That(_controllerBuilder.GetControllerFactory(), Is.TypeOf<OrchardControllerFactory>());
} }
public class StubCompositionStrategy : ICompositionStrategy { public class StubCompositionStrategy : ICompositionStrategy_Obsolete {
public IEnumerable<Type> GetModuleTypes() { public IEnumerable<Type> GetModuleTypes() {
return Enumerable.Empty<Type>(); return Enumerable.Empty<Type>();
} }

View File

@@ -54,7 +54,7 @@ namespace Orchard.Tests.Mvc.Routes {
}; };
} }
public ShellTopology GetExtensionsTopology() { public ShellTopology_Obsolete GetExtensionsTopology() {
throw new NotImplementedException(); throw new NotImplementedException();
} }

View File

@@ -14,16 +14,16 @@ namespace Orchard.Data {
} }
public class SessionFactoryHolder : ISessionFactoryHolder { public class SessionFactoryHolder : ISessionFactoryHolder {
private readonly IShellSettings _shellSettings; private readonly ShellSettings _shellSettings;
private readonly ICompositionStrategy _compositionStrategy; private readonly ICompositionStrategy_Obsolete _compositionStrategy;
private readonly ISessionFactoryBuilder _sessionFactoryBuilder; private readonly ISessionFactoryBuilder _sessionFactoryBuilder;
private readonly IAppDataFolder _appDataFolder; private readonly IAppDataFolder _appDataFolder;
private ISessionFactory _sessionFactory; private ISessionFactory _sessionFactory;
public SessionFactoryHolder( public SessionFactoryHolder(
IShellSettings shellSettings, ShellSettings shellSettings,
ICompositionStrategy compositionStrategy, ICompositionStrategy_Obsolete compositionStrategy,
ISessionFactoryBuilder sessionFactoryBuilder, ISessionFactoryBuilder sessionFactoryBuilder,
IAppDataFolder appDataFolder) { IAppDataFolder appDataFolder) {
_shellSettings = shellSettings; _shellSettings = shellSettings;

View File

@@ -9,11 +9,11 @@ namespace Orchard.Environment.Configuration {
public string Foo { get; set; } public string Foo { get; set; }
public IEnumerable<IShellSettings> LoadSettings() { public IEnumerable<ShellSettings> LoadSettings() {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public void SaveSettings(IShellSettings settings) { public void SaveSettings(ShellSettings settings) {
throw new NotImplementedException(); throw new NotImplementedException();
} }
} }

View File

@@ -15,11 +15,11 @@ namespace Orchard.Environment.Configuration {
T = NullLocalizer.Instance; T = NullLocalizer.Instance;
} }
IEnumerable<IShellSettings> ITenantManager.LoadSettings() { IEnumerable<ShellSettings> ITenantManager.LoadSettings() {
return LoadSettings().ToArray(); return LoadSettings().ToArray();
} }
void ITenantManager.SaveSettings(IShellSettings settings) { void ITenantManager.SaveSettings(ShellSettings settings) {
if (settings == null) if (settings == null)
throw new ArgumentException(T("There are no settings to save.").ToString()); throw new ArgumentException(T("There are no settings to save.").ToString());
if (string.IsNullOrEmpty(settings.Name)) if (string.IsNullOrEmpty(settings.Name))
@@ -29,7 +29,7 @@ namespace Orchard.Environment.Configuration {
_appDataFolder.CreateFile(filePath, ComposeSettings(settings)); _appDataFolder.CreateFile(filePath, ComposeSettings(settings));
} }
IEnumerable<IShellSettings> LoadSettings() { IEnumerable<ShellSettings> LoadSettings() {
var filePaths = _appDataFolder var filePaths = _appDataFolder
.ListDirectories("Sites") .ListDirectories("Sites")
.SelectMany(path => _appDataFolder.ListFiles(path)) .SelectMany(path => _appDataFolder.ListFiles(path))
@@ -47,7 +47,7 @@ namespace Orchard.Environment.Configuration {
public string DataPrefix { get; set; } public string DataPrefix { get; set; }
} }
static IShellSettings ParseSettings(string text) { static ShellSettings ParseSettings(string text) {
var ser = new YamlSerializer(); var ser = new YamlSerializer();
var content = ser.Deserialize(text, typeof(Content)).Cast<Content>().Single(); var content = ser.Deserialize(text, typeof(Content)).Cast<Content>().Single();
return new ShellSettings { return new ShellSettings {
@@ -58,7 +58,7 @@ namespace Orchard.Environment.Configuration {
}; };
} }
static string ComposeSettings(IShellSettings settings) { static string ComposeSettings(ShellSettings settings) {
if (settings == null) if (settings == null)
return ""; return "";

View File

@@ -2,7 +2,7 @@ using System.Collections.Generic;
namespace Orchard.Environment.Configuration { namespace Orchard.Environment.Configuration {
public interface ITenantManager { public interface ITenantManager {
IEnumerable<IShellSettings> LoadSettings(); IEnumerable<ShellSettings> LoadSettings();
void SaveSettings(IShellSettings settings); void SaveSettings(ShellSettings settings);
} }
} }

View File

@@ -1,12 +1,5 @@
namespace Orchard.Environment.Configuration { namespace Orchard.Environment.Configuration {
public interface IShellSettings { public class ShellSettings {
string Name { get; }
string DataProvider { get; }
string DataConnectionString { get; }
string DataPrefix { get; }
}
public class ShellSettings : IShellSettings {
public string Name { get; set; } public string Name { get; set; }
public string DataProvider { get; set; } public string DataProvider { get; set; }
public string DataConnectionString { get; set; } public string DataConnectionString { get; set; }

View File

@@ -12,7 +12,7 @@ using Orchard.Extensions.Records;
namespace Orchard.Environment { namespace Orchard.Environment {
//TEMP: This will be replaced by packaging system //TEMP: This will be replaced by packaging system
public interface ICompositionStrategy { public interface ICompositionStrategy_Obsolete {
IEnumerable<Type> GetModuleTypes(); IEnumerable<Type> GetModuleTypes();
IEnumerable<Type> GetDependencyTypes(); IEnumerable<Type> GetDependencyTypes();
IEnumerable<RecordDescriptor> GetRecordDescriptors(); IEnumerable<RecordDescriptor> GetRecordDescriptors();
@@ -23,7 +23,7 @@ namespace Orchard.Environment {
public string Prefix { get; set; } public string Prefix { get; set; }
} }
public class DefaultCompositionStrategy : ICompositionStrategy { public class DefaultCompositionStrategy : ICompositionStrategy_Obsolete {
private readonly IExtensionManager _extensionManager; private readonly IExtensionManager _extensionManager;
public DefaultCompositionStrategy(IExtensionManager extensionManager) { public DefaultCompositionStrategy(IExtensionManager extensionManager) {

View File

@@ -13,7 +13,7 @@ namespace Orchard.Environment {
public class DefaultOrchardHost : IOrchardHost { public class DefaultOrchardHost : IOrchardHost {
private readonly IContainerProvider _containerProvider; private readonly IContainerProvider _containerProvider;
private readonly ControllerBuilder _controllerBuilder; private readonly ControllerBuilder _controllerBuilder;
private readonly IEnumerable<IShellContainerFactory> _shellContainerFactories; private readonly IEnumerable<IShellContainerFactory_Obsolete> _shellContainerFactories;
private readonly ITenantManager _tenantManager; private readonly ITenantManager _tenantManager;
private IOrchardShell _current; private IOrchardShell _current;
@@ -23,7 +23,7 @@ namespace Orchard.Environment {
IContainerProvider containerProvider, IContainerProvider containerProvider,
ITenantManager tenantManager, ITenantManager tenantManager,
ControllerBuilder controllerBuilder, ControllerBuilder controllerBuilder,
IEnumerable<IShellContainerFactory> shellContainerFactories) { IEnumerable<IShellContainerFactory_Obsolete> shellContainerFactories) {
_containerProvider = containerProvider; _containerProvider = containerProvider;
_tenantManager = tenantManager; _tenantManager = tenantManager;
_controllerBuilder = controllerBuilder; _controllerBuilder = controllerBuilder;
@@ -58,7 +58,7 @@ namespace Orchard.Environment {
EndRequest(); EndRequest();
} }
IStandaloneEnvironment IOrchardHost.CreateStandaloneEnvironment(IShellSettings shellSettings) { IStandaloneEnvironment IOrchardHost.CreateStandaloneEnvironment(ShellSettings shellSettings) {
var shellContainer = CreateShellContainer(shellSettings); var shellContainer = CreateShellContainer(shellSettings);
return new StandaloneEnvironment(shellContainer); return new StandaloneEnvironment(shellContainer);
} }
@@ -105,7 +105,7 @@ namespace Orchard.Environment {
return CreateShellContainer(null); return CreateShellContainer(null);
} }
private ILifetimeScope CreateShellContainer(IShellSettings shellSettings) { private ILifetimeScope CreateShellContainer(ShellSettings shellSettings) {
foreach (var factory in _shellContainerFactories) { foreach (var factory in _shellContainerFactories) {
var container = factory.CreateContainer(shellSettings); var container = factory.CreateContainer(shellSettings);
if (container != null) { if (container != null) {

View File

@@ -26,6 +26,6 @@ namespace Orchard.Environment {
/// Can be used to build an temporary self-contained instance of a shell's configured code. /// Can be used to build an temporary self-contained instance of a shell's configured code.
/// Services may be resolved from within this instance to configure and initialize it's storage. /// Services may be resolved from within this instance to configure and initialize it's storage.
/// </summary> /// </summary>
IStandaloneEnvironment CreateStandaloneEnvironment(IShellSettings shellSettings); IStandaloneEnvironment CreateStandaloneEnvironment(ShellSettings shellSettings);
} }
} }

View File

@@ -18,11 +18,11 @@ namespace Orchard.Environment {
// a single default host implementation is needed for bootstrapping a web app domain // a single default host implementation is needed for bootstrapping a web app domain
builder.RegisterType<DefaultOrchardHost>().As<IOrchardHost>().SingleInstance(); builder.RegisterType<DefaultOrchardHost>().As<IOrchardHost>().SingleInstance();
builder.RegisterType<DefaultCompositionStrategy>().As<ICompositionStrategy>().SingleInstance(); builder.RegisterType<DefaultCompositionStrategy>().As<ICompositionStrategy_Obsolete>().SingleInstance();
builder.RegisterType<DefaultShellContainerFactory>().As<IShellContainerFactory>().SingleInstance(); builder.RegisterType<DefaultShellContainerFactory>().As<IShellContainerFactory_Obsolete>().SingleInstance();
builder.RegisterType<AppDataFolder>().As<IAppDataFolder>().SingleInstance(); builder.RegisterType<AppDataFolder>().As<IAppDataFolder>().SingleInstance();
builder.RegisterType<DefaultTenantManager>().As<ITenantManager>().SingleInstance(); builder.RegisterType<DefaultTenantManager>().As<ITenantManager>().SingleInstance();
builder.RegisterType<SafeModeShellContainerFactory>().As<IShellContainerFactory>().SingleInstance(); builder.RegisterType<SafeModeShellContainerFactory>().As<IShellContainerFactory_Obsolete>().SingleInstance();
// The container provider gives you access to the lowest container at the time, // The container provider gives you access to the lowest container at the time,
// and dynamically creates a per-request container. The EndRequestLifetime method // and dynamically creates a per-request container. The EndRequestLifetime method

View File

@@ -6,16 +6,16 @@ using Orchard.Environment.AutofacUtil.DynamicProxy2;
using Orchard.Environment.Configuration; using Orchard.Environment.Configuration;
namespace Orchard.Environment.ShellBuilders { namespace Orchard.Environment.ShellBuilders {
public class DefaultShellContainerFactory : IShellContainerFactory { public class DefaultShellContainerFactory : IShellContainerFactory_Obsolete {
private readonly IContainer _container; private readonly IContainer _container;
private readonly ICompositionStrategy _compositionStrategy; private readonly ICompositionStrategy_Obsolete _compositionStrategy;
public DefaultShellContainerFactory(IContainer container, ICompositionStrategy compositionStrategy) { public DefaultShellContainerFactory(IContainer container, ICompositionStrategy_Obsolete compositionStrategy) {
_container = container; _container = container;
_compositionStrategy = compositionStrategy; _compositionStrategy = compositionStrategy;
} }
public virtual ILifetimeScope CreateContainer(IShellSettings settings) { public virtual ILifetimeScope CreateContainer(ShellSettings settings) {
// null settings means we need to defer to the setup container factory // null settings means we need to defer to the setup container factory
if (settings == null) { if (settings == null) {
return null; return null;
@@ -25,7 +25,7 @@ namespace Orchard.Environment.ShellBuilders {
// add module types to container being built // add module types to container being built
var addingModulesAndServices = new ContainerUpdater(); var addingModulesAndServices = new ContainerUpdater();
addingModulesAndServices.RegisterInstance(settings).As<IShellSettings>(); addingModulesAndServices.RegisterInstance(settings).As<ShellSettings>();
addingModulesAndServices.RegisterInstance(dynamicProxyContext); addingModulesAndServices.RegisterInstance(dynamicProxyContext);
addingModulesAndServices.RegisterType<DefaultOrchardShell>().As<IOrchardShell>().SingleInstance(); addingModulesAndServices.RegisterType<DefaultOrchardShell>().As<IOrchardShell>().SingleInstance();

View File

@@ -1,8 +1,13 @@
using Autofac; using Autofac;
using Orchard.Environment.Configuration; using Orchard.Environment.Configuration;
using Orchard.Environment.Topology.Models;
namespace Orchard.Environment.ShellBuilders { namespace Orchard.Environment.ShellBuilders {
public interface IShellContainerFactory { public interface IShellContainerFactory {
ILifetimeScope CreateContainer(IShellSettings settings); ILifetimeScope CreateContainer(ShellTopology topology);
}
public interface IShellContainerFactory_Obsolete {
ILifetimeScope CreateContainer(ShellSettings settings);
} }
} }

View File

@@ -28,14 +28,14 @@ using Orchard.UI.PageTitle;
using Orchard.UI.Zones; using Orchard.UI.Zones;
namespace Orchard.Environment.ShellBuilders { namespace Orchard.Environment.ShellBuilders {
public class SafeModeShellContainerFactory : IShellContainerFactory { public class SafeModeShellContainerFactory : IShellContainerFactory_Obsolete {
private readonly IContainer _container; private readonly IContainer _container;
public SafeModeShellContainerFactory(IContainer container) { public SafeModeShellContainerFactory(IContainer container) {
_container = container; _container = container;
} }
public ILifetimeScope CreateContainer(IShellSettings settings) { public ILifetimeScope CreateContainer(ShellSettings settings) {
// when you have settings the setup container factory is not in effect // when you have settings the setup container factory is not in effect
if (settings != null) { if (settings != null) {
return null; return null;

View File

@@ -0,0 +1,7 @@
using Orchard.Environment.Topology.Models;
namespace Orchard.Environment.Topology {
public interface ICompositionStrategy {
ShellTopology Compose(ShellTopologyDescriptor descriptor);
}
}

View File

@@ -0,0 +1,8 @@
using Orchard.Environment.Topology.Models;
namespace Orchard.Environment.Topology {
public interface ITopologyDescriptorCache {
ShellTopologyDescriptor Fetch(string name);
void Store(string name, ShellTopologyDescriptor descriptor);
}
}

View File

@@ -0,0 +1,7 @@
using Orchard.Environment.Topology.Models;
namespace Orchard.Environment.Topology {
public interface ITopologyDescriptorProvider {
ShellTopologyDescriptor GetTopologyDescriptor();
}
}

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using Orchard.Extensions;
namespace Orchard.Environment.Topology.Models {
public class ShellTopology {
public IEnumerable<ModuleTopology> Modules { get; set; }
public IEnumerable<DependencyTopology> Dependencies { get; set; }
public IEnumerable<ControllerTopology> Controllers { get; set; }
public IEnumerable<RecordTopology> Records { get; set; }
}
public class ShellTopologyItem {
public Type Type { get; set; }
public ExtensionDescriptor ExtensionDescriptor { get; set; }
public FeatureDescriptor FeatureDescriptor { get; set; }
public ExtensionEntry ExtensionEntry { get; set; }
}
public class ModuleTopology : ShellTopologyItem {
}
public class DependencyTopology : ShellTopologyItem {
public IEnumerable<TopologyParameter> Parameters { get; set; }
}
public class ControllerTopology : ShellTopologyItem {
public string AreaName { get; set; }
public string ControllerName { get; set; }
}
public class RecordTopology : ShellTopologyItem {
public string TableName { get; set; }
}
}

View File

@@ -0,0 +1,22 @@
using System.Collections.Generic;
using Orchard.Environment.Configuration;
namespace Orchard.Environment.Topology.Models {
public class ShellTopologyDescriptor {
public int SerialNumber { get; set; }
public ShellSettings Settings { get; set; }
public IEnumerable<TopologyFeature> EnabledFeatures { get; set; }
public IEnumerable<TopologyParameter> Parameters { get; set; }
}
public class TopologyFeature {
public string ExtensionName { get; set; }
public string FeatureName { get; set; }
}
public class TopologyParameter {
public string Component { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
}

View File

@@ -101,10 +101,10 @@ namespace Orchard.Extensions {
return _activeExtensions; return _activeExtensions;
} }
public ShellTopology GetExtensionsTopology() { public ShellTopology_Obsolete GetExtensionsTopology() {
var types = ActiveExtensions().SelectMany(x => x.ExportedTypes); var types = ActiveExtensions().SelectMany(x => x.ExportedTypes);
types = types.Concat(typeof(IOrchardHost).Assembly.GetExportedTypes()); types = types.Concat(typeof(IOrchardHost).Assembly.GetExportedTypes());
return new ShellTopology { Types = types.Where(t => t.IsClass && !t.IsAbstract) }; return new ShellTopology_Obsolete { Types = types.Where(t => t.IsClass && !t.IsAbstract) };
} }
public void InstallExtension(string extensionType, HttpPostedFileBase extensionBundle) { public void InstallExtension(string extensionType, HttpPostedFileBase extensionBundle) {

View File

@@ -5,7 +5,7 @@ namespace Orchard.Extensions {
public interface IExtensionManager { public interface IExtensionManager {
IEnumerable<ExtensionDescriptor> AvailableExtensions(); IEnumerable<ExtensionDescriptor> AvailableExtensions();
IEnumerable<ExtensionEntry> ActiveExtensions(); IEnumerable<ExtensionEntry> ActiveExtensions();
ShellTopology GetExtensionsTopology(); ShellTopology_Obsolete GetExtensionsTopology();
void InstallExtension(string extensionType, HttpPostedFileBase extensionBundle); void InstallExtension(string extensionType, HttpPostedFileBase extensionBundle);
void UninstallExtension(string extensionType, string extensionName); void UninstallExtension(string extensionType, string extensionName);
} }

View File

@@ -2,7 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace Orchard.Extensions { namespace Orchard.Extensions {
public class ShellTopology { public class ShellTopology_Obsolete {
public IEnumerable<Type> Types { get; set; } public IEnumerable<Type> Types { get; set; }
} }
} }

View File

@@ -79,6 +79,7 @@
<Reference Include="System.Core"> <Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework> <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference> </Reference>
<Reference Include="System.Data" />
<Reference Include="System.Transactions" /> <Reference Include="System.Transactions" />
<Reference Include="System.Web" /> <Reference Include="System.Web" />
<Reference Include="System.Web.Abstractions"> <Reference Include="System.Web.Abstractions">
@@ -91,6 +92,7 @@
<Reference Include="System.Web.Routing"> <Reference Include="System.Web.Routing">
<RequiredTargetFramework>3.5</RequiredTargetFramework> <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference> </Reference>
<Reference Include="System.Xml" />
<Reference Include="Yaml, Version=1.0.3370.39839, Culture=neutral, PublicKeyToken=187a3d240e44a135, processorArchitecture=MSIL"> <Reference Include="Yaml, Version=1.0.3370.39839, Culture=neutral, PublicKeyToken=187a3d240e44a135, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\yaml\Yaml.dll</HintPath> <HintPath>..\..\lib\yaml\Yaml.dll</HintPath>
@@ -165,6 +167,11 @@
<Compile Include="Environment\Configuration\DefaultTenantManager.cs" /> <Compile Include="Environment\Configuration\DefaultTenantManager.cs" />
<Compile Include="Environment\Configuration\ITenantManager.cs" /> <Compile Include="Environment\Configuration\ITenantManager.cs" />
<Compile Include="Environment\AutofacUtil\ContainerUpdater.cs" /> <Compile Include="Environment\AutofacUtil\ContainerUpdater.cs" />
<Compile Include="Environment\Topology\ICompositionStrategy.cs" />
<Compile Include="Environment\Topology\ITopologyDescriptorProvider.cs" />
<Compile Include="Environment\Topology\ITopologyDescriptorCache.cs" />
<Compile Include="Environment\Topology\Models\ShellTopology.cs" />
<Compile Include="Environment\Topology\Models\ShellTopologyDescriptor.cs" />
<Compile Include="Environment\ShellBuilders\DefaultShellContainerFactory.cs" /> <Compile Include="Environment\ShellBuilders\DefaultShellContainerFactory.cs" />
<Compile Include="Environment\ShellBuilders\IShellContainerFactory.cs" /> <Compile Include="Environment\ShellBuilders\IShellContainerFactory.cs" />
<Compile Include="Environment\ShellBuilders\SafeModeShellContainerFactory.cs" /> <Compile Include="Environment\ShellBuilders\SafeModeShellContainerFactory.cs" />
@@ -400,6 +407,9 @@
<None Include="app.config" /> <None Include="app.config" />
<None Include="ContentManagement\Diagram.cd" /> <None Include="ContentManagement\Diagram.cd" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Environment\Models\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- 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. Other similar extension points exist, see Microsoft.Common.targets.