Tweak extension loading strategy:

Don't store compiled assemblies in "App_Data/Dependencies" if we
have a more recent one already stored.

--HG--
branch : dev
This commit is contained in:
Renaud Paquay
2010-06-04 19:59:20 -07:00
parent a249579191
commit 412d21b234
3 changed files with 23 additions and 9 deletions

View File

@@ -15,7 +15,7 @@ namespace Orchard.Environment.Extensions.Loaders {
_virtualPathProvider = virtualPathProvider;
}
public int Order { get { return 40; } }
public int Order { get { return 30; } }
public ExtensionEntry Load(ExtensionDescriptor descriptor) {
var extensionPath = _virtualPathProvider.Combine(descriptor.Location, descriptor.Name, "bin",

View File

@@ -13,7 +13,7 @@ namespace Orchard.Environment.Extensions.Loaders {
_folder = folder;
}
public int Order { get { return 30; } }
public int Order { get { return 40; } }
public ExtensionEntry Load(ExtensionDescriptor descriptor) {
var assembly = _folder.LoadAssembly(descriptor.Name);

View File

@@ -33,16 +33,30 @@ namespace Orchard.FileSystems.Dependencies {
}
public void StoreAssemblyFile(string assemblyName, string assemblyFileName) {
StoreAssemblyFile(assemblyName, assemblyFileName, Path.GetFileName(assemblyFileName));
}
private void StoreAssemblyFile(string assemblyName, string assemblyFileName, string destinationFileName) {
_virtualPathProvider.CreateDirectory(BasePath);
var destinationPath = _virtualPathProvider.MapPath(_virtualPathProvider.Combine(BasePath, destinationFileName));
File.Copy(assemblyFileName, destinationPath);
// Only store assembly if it's more recent that what we have stored already (if anything)
if (IsNewerAssembly(assemblyName, assemblyFileName)) {
var destinationFileName = Path.GetFileName(assemblyFileName);
var destinationPath = _virtualPathProvider.MapPath(_virtualPathProvider.Combine(BasePath, destinationFileName));
File.Copy(assemblyFileName, destinationPath);
StoreDepencyInformation(assemblyName, destinationFileName);
StoreDepencyInformation(assemblyName, destinationFileName);
}
}
private bool IsNewerAssembly(string assemblyName, string assemblyFileName) {
var dependency = ReadDependencies().SingleOrDefault(d => d.Name == assemblyName);
if (dependency == null) {
return true;
}
var existingFileName = _virtualPathProvider.MapPath(_virtualPathProvider.Combine(BasePath, dependency.FileName));
if (!File.Exists(existingFileName)) {
return true;
}
return (File.GetCreationTimeUtc(existingFileName) <= File.GetCreationTimeUtc(assemblyFileName));
}
private void StoreDepencyInformation(string name, string fileName) {