diff --git a/src/Microsoft.Dnx.ApplicationHost/DefaultHost.cs b/src/Microsoft.Dnx.ApplicationHost/DefaultHost.cs index 9367b7980..7d233272a 100644 --- a/src/Microsoft.Dnx.ApplicationHost/DefaultHost.cs +++ b/src/Microsoft.Dnx.ApplicationHost/DefaultHost.cs @@ -124,6 +124,8 @@ private void Initialize(RuntimeOptions options, IServiceProvider hostServices, I _project = applicationHostContext.Project; + ValidateMinRuntimeVersion(libraries); + if (options.WatchFiles) { fileWatcher.OnChanged += _ => @@ -140,11 +142,11 @@ private void Initialize(RuntimeOptions options, IServiceProvider hostServices, I var applicationEnvironment = new ApplicationEnvironment(Project, _targetFramework, options.Configuration, hostEnvironment); var compilationContext = new CompilationEngineContext( - applicationEnvironment, - _runtimeEnvironment, - loadContextAccessor.Default, - new CompilationCache(), - fileWatcher, + applicationEnvironment, + _runtimeEnvironment, + loadContextAccessor.Default, + new CompilationCache(), + fileWatcher, new ProjectGraphProvider()); // Compilation services available only for runtime compilation @@ -183,6 +185,22 @@ private void Initialize(RuntimeOptions options, IServiceProvider hostServices, I AddBreadcrumbs(libraries); } + private void ValidateMinRuntimeVersion(IEnumerable libraries) + { + foreach (var lib in libraries) + { + // We only need to validate if runtime abstractions is precompiled + // because when building from sources the versions are not ordered + // correctly + if (lib.Type == LibraryTypes.Package && + string.Equals(lib.Identity.Name, "Microsoft.Dnx.Runtime.Abstractions", StringComparison.Ordinal) && + lib.Identity.Version > new SemanticVersion(_runtimeEnvironment.RuntimeVersion)) + { + throw new InvalidOperationException($"This application requires DNX version {lib.Identity.Version} or newer to run."); + } + } + } + private void AddBreadcrumbs(IEnumerable libraries) { AddRuntimeServiceBreadcrumb();