mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-12-03 12:03:51 +08:00
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:
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user