public void LoadDescriptorsShouldWorkAcrossInstances() { var container = BuildContainer(); var clock = (StubClock)container.Resolve<IClock>(); var appDataFolder = (StubAppDataFolder)container.Resolve<IAppDataFolder>(); var dependenciesFolder = container.Resolve<IDependenciesFolder>(); var d1 = new DependencyDescriptor { Name = "name1", LoaderName = "test1", VirtualPath = "~/bin1" }; var d2 = new DependencyDescriptor { Name = "name2", LoaderName = "test2", VirtualPath = "~/bin2" }; dependenciesFolder.StoreDescriptors(new[] { d1, d2 }); // Create a new instance over the same appDataFolder var dependenciesFolder2 = container.Resolve<IDependenciesFolder>(); Assert.That(dependenciesFolder2, Is.Not.SameAs(dependenciesFolder)); // Ensure descriptors were persisted properly var result = dependenciesFolder2.LoadDescriptors(); Assert.That(result, Has.Count.EqualTo(2)); Assert.That(result.Select(p => p.Name), Has.Some.EqualTo("name1")); Assert.That(result.Select(p => p.Name), Has.Some.EqualTo("name2")); }
public void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) { throw new NotImplementedException(); }
public override IEnumerable<string> GetVirtualPathDependencies(DependencyDescriptor dependency) { yield return _assemblyProbingFolder.GetAssemblyVirtualPath(dependency.Name); }
public override IEnumerable<ExtensionCompilationReference> GetCompilationReferences(DependencyDescriptor dependency) { yield return new ExtensionCompilationReference { AssemblyName = dependency.Name }; }
public override void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) { if (_assemblyProbingFolder.AssemblyExists(dependency.Name)) { ctx.DeleteActions.Add( () => { Logger.Information("ExtensionRemoved: Deleting assembly \"{0}\" from probing directory", dependency.Name); _assemblyProbingFolder.DeleteAssembly(dependency.Name); }); // We need to restart the appDomain if the assembly is loaded if (_hostEnvironment.IsAssemblyLoaded(dependency.Name)) { Logger.Information("ExtensionRemoved: Module \"{0}\" is removed and its assembly is loaded, forcing AppDomain restart", dependency.Name); ctx.RestartAppDomain = true; } } }
public void StoreDescriptorsShouldNoOpIfNoChanges() { var container = BuildContainer(); var clock = (StubClock)container.Resolve<IClock>(); var appDataFolder = (StubAppDataFolder)container.Resolve<IAppDataFolder>(); var dependenciesFolder = container.Resolve<IDependenciesFolder>(); var d1 = new DependencyDescriptor { Name = "name1", LoaderName = "test1", VirtualPath = "~/bin1" }; var d2 = new DependencyDescriptor { Name = "name2", LoaderName = "test2", VirtualPath = "~/bin2" }; dependenciesFolder.StoreDescriptors(new[] { d1, d2 }); var dateTime1 = appDataFolder.GetLastWriteTimeUtc(Path.Combine("Dependencies", "Dependencies.xml")); clock.Advance(TimeSpan.FromMinutes(1)); dependenciesFolder.StoreDescriptors(new[] { d2, d1 }); var dateTime2 = appDataFolder.GetLastWriteTimeUtc(Path.Combine("Dependencies", "Dependencies.xml")); Assert.That(dateTime1, Is.EqualTo(dateTime2)); }
public override void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) { DeleteAssembly(ctx, dependency.Name); }
public virtual IEnumerable<ExtensionCompilationReference> GetCompilationReferences(DependencyDescriptor dependency) { return Enumerable.Empty<ExtensionCompilationReference>(); }
public override void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) { }
private string GetExtensionHash(ExtensionLoadingContext context, DependencyDescriptor dependencyDescriptor) { var hash = new Hash(); hash.AddStringInvariant(dependencyDescriptor.Name); foreach (var virtualpathDependency in context.ProcessedExtensions[dependencyDescriptor.Name].VirtualPathDependencies) { hash.AddDateTime(GetVirtualPathModificationTimeUtc(context.VirtualPathModficationDates, virtualpathDependency)); } foreach (var reference in dependencyDescriptor.References) { hash.AddStringInvariant(reference.Name); hash.AddString(reference.LoaderName); hash.AddDateTime(GetVirtualPathModificationTimeUtc(context.VirtualPathModficationDates, reference.VirtualPath)); } return hash.Value; }
public override IEnumerable<string> GetVirtualPathDependencies(DependencyDescriptor dependency) { // Return csproj and all .cs files return GetDependencies(dependency.VirtualPath); }
public override IEnumerable<ExtensionCompilationReference> GetCompilationReferences(DependencyDescriptor dependency) { yield return new ExtensionCompilationReference { BuildProviderTarget = dependency.VirtualPath }; }
public virtual IEnumerable<string> GetVirtualPathDependencies(DependencyDescriptor dependency) { return Enumerable.Empty<string>(); }
public IEnumerable<ExtensionCompilationReference> GetCompilationReferences(DependencyDescriptor dependency) { throw new NotImplementedException(); }
public void StoreDescriptorsShouldWork() { var dependenciesFolder = BuildContainer().Resolve<IDependenciesFolder>(); var d = new DependencyDescriptor { Name = "name", LoaderName = "test", VirtualPath = "~/bin" }; dependenciesFolder.StoreDescriptors(new[] { d }); var e = dependenciesFolder.LoadDescriptors(); Assert.That(e, Has.Count.EqualTo(1)); Assert.That(e.First().Name, Is.EqualTo("name")); Assert.That(e.First().LoaderName, Is.EqualTo("test")); Assert.That(e.First().VirtualPath, Is.EqualTo("~/bin")); }
public IEnumerable<string> GetVirtualPathDependencies(DependencyDescriptor dependency) { throw new NotImplementedException(); }
public virtual void ExtensionRemoved(ExtensionLoadingContext ctx, DependencyDescriptor dependency) { }