diff --git a/Volo.Abp.sln b/Volo.Abp.sln
index 85d5869fdb..111484058d 100644
--- a/Volo.Abp.sln
+++ b/Volo.Abp.sln
@@ -180,6 +180,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.UI.
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared", "src\Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared\Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.csproj", "{86A3BB43-8FA2-4CC2-BAD0-A86C6C9D9585}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.UI.Tests", "test\Volo.Abp.AspNetCore.Mvc.UI.Tests\Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj", "{7E0517E0-AE09-4E10-8469-308F065F2F43}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -502,6 +504,10 @@ Global
 		{86A3BB43-8FA2-4CC2-BAD0-A86C6C9D9585}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{86A3BB43-8FA2-4CC2-BAD0-A86C6C9D9585}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{86A3BB43-8FA2-4CC2-BAD0-A86C6C9D9585}.Release|Any CPU.Build.0 = Release|Any CPU
+		{7E0517E0-AE09-4E10-8469-308F065F2F43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{7E0517E0-AE09-4E10-8469-308F065F2F43}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{7E0517E0-AE09-4E10-8469-308F065F2F43}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{7E0517E0-AE09-4E10-8469-308F065F2F43}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -588,6 +594,7 @@ Global
 		{0AE814CE-E155-4259-8746-262D174AB510} = {447C8A77-E5F0-4538-8687-7383196D04EA}
 		{2F5EE6D9-511B-4998-BD62-0B9F03E02432} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
 		{86A3BB43-8FA2-4CC2-BAD0-A86C6C9D9585} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
+		{7E0517E0-AE09-4E10-8469-308F065F2F43} = {447C8A77-E5F0-4538-8687-7383196D04EA}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Views/Shared/_AppLayout.cshtml b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Views/Shared/_AppLayout.cshtml
index 10b7735fe2..c212bce6e9 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Views/Shared/_AppLayout.cshtml
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic/Views/Shared/_AppLayout.cshtml
@@ -11,15 +11,15 @@
     
 
     
ABP Web Application
-    
+
     
     
     
 
     
-    
-    
-    
+
+    
+
     @RenderSection("styles", false)
 
 
@@ -32,7 +32,10 @@
     
 
     
-    
+
+    
+    
+
     @RenderSection("scripts", false)
 
 
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpAspNetCoreMvcUiThemeSharedModule.cs b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpAspNetCoreMvcUiThemeSharedModule.cs
index d8a13cab07..d194e3e5d9 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpAspNetCoreMvcUiThemeSharedModule.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/AbpAspNetCoreMvcUiThemeSharedModule.cs
@@ -1,6 +1,6 @@
 using Microsoft.Extensions.DependencyInjection;
-using Volo.Abp.AspNetCore.Mvc.Bundling;
 using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap;
+using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
 using Volo.Abp.Modularity;
 using Volo.Abp.VirtualFileSystem;
 
@@ -44,10 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared
                     "/libs/abp/jquery/abp.resource-loader.js",
                     "/libs/abp/aspnetcore.mvc.ui.theme.shared/jquery/jquery-extensions.js",
                     "/libs/abp/aspnetcore.mvc.ui.theme.shared/bootstrap/abp.modal-manager.js",
-                    "/libs/abp/aspnetcore.mvc.ui.theme.shared/datatables/datatables-extensions.js",
-
-                    "/Abp/ApplicationConfigurationScript",
-                    "/Abp/ServiceProxyScript"
+                    "/libs/abp/aspnetcore.mvc.ui.theme.shared/datatables/datatables-extensions.js"
                 });
             });
 
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleManager.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleManager.cs
deleted file mode 100644
index a8bccaacb8..0000000000
--- a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleManager.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Collections.Generic;
-using Microsoft.Extensions.Options;
-using Volo.Abp.DependencyInjection;
-
-namespace Volo.Abp.AspNetCore.Mvc.Bundling
-{
-    public class BundleManager : IBundleManager, ITransientDependency
-    {
-        private readonly BundlingOptions _options;
-
-        public BundleManager(IOptions options)
-        {
-            _options = options.Value;
-        }
-
-        public List GetStyleBundleFiles(string bundleName)
-        {
-            return _options.StyleBundles.GetFiles(bundleName);
-        }
-
-        public List GetScriptBundleFiles(string bundleName)
-        {
-            return _options.ScriptBundles.GetFiles(bundleName);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/AbpAspNetCoreMvcUiModule.cs
similarity index 94%
rename from src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs
rename to src/Volo.Abp.AspNetCore.Mvc.UI/UI/AbpAspNetCoreMvcUiModule.cs
index 5d52fdcd62..c7e1cd0336 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI/AbpAspNetCoreMvcUiModule.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/AbpAspNetCoreMvcUiModule.cs
@@ -3,7 +3,7 @@ using Volo.Abp.Modularity;
 using Volo.Abp.UI.Navigation;
 using Volo.Abp.VirtualFileSystem;
 
-namespace Volo.Abp.AspNetCore.Mvc
+namespace Volo.Abp.AspNetCore.Mvc.UI
 {
     [DependsOn(typeof(AbpAspNetCoreMvcModule))]
     [DependsOn(typeof(AbpUiNavigationModule))]
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleCollection.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundleCollection.cs
similarity index 94%
rename from src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleCollection.cs
rename to src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundleCollection.cs
index e04a6a0eeb..bb879c9ed5 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundleCollection.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundleCollection.cs
@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 
-namespace Volo.Abp.AspNetCore.Mvc.Bundling
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
 {
     public class BundleCollection
     {
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundleManager.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundleManager.cs
new file mode 100644
index 0000000000..f07e94a6ef
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundleManager.cs
@@ -0,0 +1,52 @@
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Options;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
+{
+    public class BundleManager : IBundleManager, ISingletonDependency
+    {
+        private readonly BundlingOptions _options;
+        private readonly IHostingEnvironment _hostingEnvironment;
+        private readonly IBundler _bundler;
+
+        private readonly ConcurrentDictionary _cache;
+
+        public BundleManager(
+            IOptions options,
+            IHostingEnvironment hostingEnvironment,
+            IBundler bundler)
+        {
+            _hostingEnvironment = hostingEnvironment;
+            _bundler = bundler;
+            _options = options.Value;
+
+            _cache = new ConcurrentDictionary();
+        }
+
+        public List GetStyleBundleFiles(string bundleName)
+        {
+            return _options.StyleBundles.GetFiles(bundleName);
+        }
+
+        public List GetScriptBundleFiles(string bundleName)
+        {
+            //if (_hostingEnvironment.IsDevelopment())
+            {
+                return _options.ScriptBundles.GetFiles(bundleName);
+            }
+
+            return new List
+            {
+                _cache.GetOrAdd(
+                    "SCRIPT:" + bundleName,
+                    () => _bundler.CreateBundle(
+                        _options.ScriptBundles.GetFiles(bundleName)
+                    )
+                )
+            };
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/Bundler.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/Bundler.cs
new file mode 100644
index 0000000000..796ac447d5
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/Bundler.cs
@@ -0,0 +1,18 @@
+using System.Collections.Generic;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
+{
+    public class Bundler : IBundler, ITransientDependency
+    {
+        public Bundler()
+        {
+            
+        }
+
+        public string CreateBundle(List files)
+        {
+            return "";
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundlingOptions.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundlingOptions.cs
similarity index 87%
rename from src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundlingOptions.cs
rename to src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundlingOptions.cs
index 8936fe066d..29ea934506 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/BundlingOptions.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/BundlingOptions.cs
@@ -1,4 +1,4 @@
-namespace Volo.Abp.AspNetCore.Mvc.Bundling
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
 {
     public class BundlingOptions
     {
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/IBundleManager.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/IBundleManager.cs
similarity index 81%
rename from src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/IBundleManager.cs
rename to src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/IBundleManager.cs
index 3c2bc8f361..1920e39838 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI/Bundling/IBundleManager.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/IBundleManager.cs
@@ -1,6 +1,6 @@
 using System.Collections.Generic;
 
-namespace Volo.Abp.AspNetCore.Mvc.Bundling
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
 {
     public interface IBundleManager
     {
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/IBundler.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/IBundler.cs
new file mode 100644
index 0000000000..1066a08b9b
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Bundling/IBundler.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling
+{
+    public interface IBundler
+    {
+        string CreateBundle(List files);
+    }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/IJavascriptMinifier.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/IJavascriptMinifier.cs
new file mode 100644
index 0000000000..883af39e41
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/IJavascriptMinifier.cs
@@ -0,0 +1,7 @@
+namespace Volo.Abp.AspNetCore.Mvc.UI.Minification
+{
+    public interface IJavascriptMinifier
+    {
+        string Minify(string source, string fileName = null);
+    }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/NUglify/NUglifyException.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/NUglify/NUglifyException.cs
new file mode 100644
index 0000000000..a5f36340a8
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/NUglify/NUglifyException.cs
@@ -0,0 +1,26 @@
+using System.Collections.Generic;
+using System.Runtime.Serialization;
+using NUglify;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Minification.NUglify
+{
+    public class NUglifyException : AbpException
+    {
+        public List Errors { get; set; }
+
+        public NUglifyException(string message, List errors)
+            : base(message)
+        {
+            Errors = errors;
+        }
+
+        /// 
+        /// Constructor for serializing.
+        /// 
+        public NUglifyException(SerializationInfo serializationInfo, StreamingContext context)
+            : base(serializationInfo, context)
+        {
+
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/NUglify/NUglifyJavascriptMinifier.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/NUglify/NUglifyJavascriptMinifier.cs
new file mode 100644
index 0000000000..46438757d9
--- /dev/null
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/UI/Minification/NUglify/NUglifyJavascriptMinifier.cs
@@ -0,0 +1,26 @@
+using NUglify;
+using Volo.Abp.DependencyInjection;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Minification.NUglify
+{
+    public class NUglifyJavascriptMinifier : IJavascriptMinifier, ITransientDependency
+    {
+        public string Minify(string source, string fileName = null)
+        {
+            var result = Uglify.Js(source, fileName);
+            CheckErrors(result);
+            return result.Code;
+        }
+
+        private static void CheckErrors(UglifyResult result)
+        {
+            if (result.HasErrors)
+            {
+                throw new NUglifyException(
+                    "There are some errors on uglifying the given source code!",
+                    result.Errors
+                );
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/AbpScriptBundle/AbpStyleBundleViewComponent.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/AbpScriptBundle/AbpStyleBundleViewComponent.cs
index 0276c22360..b2119020aa 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/AbpScriptBundle/AbpStyleBundleViewComponent.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/AbpScriptBundle/AbpStyleBundleViewComponent.cs
@@ -1,5 +1,5 @@
 using Microsoft.AspNetCore.Mvc;
-using Volo.Abp.AspNetCore.Mvc.Bundling;
+using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
 
 namespace Volo.Abp.AspNetCore.Mvc.Views.Shared.Components.AbpScriptBundle
 {
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/AbpStyleBundle/AbpStyleBundleViewComponent.cs b/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/AbpStyleBundle/AbpStyleBundleViewComponent.cs
index 5152e3b710..09144bfc3a 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/AbpStyleBundle/AbpStyleBundleViewComponent.cs
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/Views/Shared/Components/AbpStyleBundle/AbpStyleBundleViewComponent.cs
@@ -1,5 +1,5 @@
 using Microsoft.AspNetCore.Mvc;
-using Volo.Abp.AspNetCore.Mvc.Bundling;
+using Volo.Abp.AspNetCore.Mvc.UI.Bundling;
 
 namespace Volo.Abp.AspNetCore.Mvc.Views.Shared.Components.AbpStyleBundle
 {
diff --git a/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj b/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj
index f30e80a1a3..0f96f0e496 100644
--- a/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj
+++ b/src/Volo.Abp.AspNetCore.Mvc.UI/Volo.Abp.AspNetCore.Mvc.UI.csproj
@@ -14,6 +14,10 @@
     
   
 
+  
+    
+  
+
   
     
     
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj
new file mode 100644
index 0000000000..78b69e425f
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj
@@ -0,0 +1,48 @@
+
+
+  
+    netcoreapp2.0
+    $(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+    Volo.Abp.AspNetCore.Mvc.UI.Tests
+    Volo.Abp.AspNetCore.Mvc.UI.Tests
+    true
+    true
+    false
+    false
+    false
+    true
+    true
+    
+  
+
+  
+    
+    
+  
+
+  
+    
+    
+    
+  
+
+  
+
+  
+  
+  
+    
+      PreserveNewest
+    
+  
+
+  
+  
+    
+      
+    
+
+    
+  
+
+
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs
new file mode 100644
index 0000000000..af4d7884b8
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestBase.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.AspNetCore.TestBase;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI
+{
+    public abstract class AbpAspNetCoreMvcUiTestBase : AbpAspNetCoreIntegratedTestBase
+    {
+        
+    }
+}
\ No newline at end of file
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestModule.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestModule.cs
new file mode 100644
index 0000000000..7df5be3bf7
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/AbpAspNetCoreMvcUiTestModule.cs
@@ -0,0 +1,20 @@
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.AspNetCore.TestBase;
+using Volo.Abp.Autofac;
+using Volo.Abp.Modularity;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI
+{
+    [DependsOn(
+        typeof(AbpAspNetCoreTestBaseModule),
+        typeof(AbpAspNetCoreMvcUiModule),
+        typeof(AbpAutofacModule)
+    )]
+    public class AbpAspNetCoreMvcUiTestModule : AbpModule
+    {
+        public override void ConfigureServices(IServiceCollection services)
+        {
+            services.AddAssemblyOf();
+        }
+    }
+}
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Minification/NUglify/JavascriptMinifier_Tests.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Minification/NUglify/JavascriptMinifier_Tests.cs
new file mode 100644
index 0000000000..ca04a8c929
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Minification/NUglify/JavascriptMinifier_Tests.cs
@@ -0,0 +1,26 @@
+using Shouldly;
+using Xunit;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI.Minification.NUglify
+{
+    public class NUglifyJavascriptMinifier_Tests : AbpAspNetCoreMvcUiTestBase
+    {
+        private readonly NUglifyJavascriptMinifier _nUglifyJavascriptMinifier;
+
+        public NUglifyJavascriptMinifier_Tests()
+        {
+            _nUglifyJavascriptMinifier = GetRequiredService();
+        }
+
+        [Fact]
+        public void Should_Minify_Simple_Code()
+        {
+            const string source = "var x = 5; var y = 6;";
+
+            var minified = _nUglifyJavascriptMinifier.Minify(source);
+
+            minified.Length.ShouldBeGreaterThan(0);
+            minified.Length.ShouldBeLessThan(source.Length);
+        }
+    }
+}
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs
new file mode 100644
index 0000000000..1f4182110a
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo/Abp/AspNetCore/Mvc/UI/Startup.cs
@@ -0,0 +1,27 @@
+using System;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+
+namespace Volo.Abp.AspNetCore.Mvc.UI
+{
+    public class Startup
+    {
+        public IServiceProvider ConfigureServices(IServiceCollection services)
+        {
+            services.AddApplication(options =>
+            {
+                options.UseAutofac();
+            });
+
+            //TODO: This is needed because ASP.NET Core does not use IServiceProviderFactory!
+            return services.BuildServiceProviderFromFactory();
+        }
+
+        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
+        {
+            app.InitializeApplication();
+        }
+    }
+}
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.css b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.css
new file mode 100644
index 0000000000..edfc4e2bd0
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.css
@@ -0,0 +1,3 @@
+.lib1-css-content {
+    color: red;
+}
\ No newline at end of file
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.js b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.js
new file mode 100644
index 0000000000..0e2f95a478
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib1/lib1.js
@@ -0,0 +1,3 @@
+(function() {
+    //lib1-js-content
+})();
\ No newline at end of file
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.css b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.css
new file mode 100644
index 0000000000..f1789fb234
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.css
@@ -0,0 +1,3 @@
+.lib2-css-content {
+    color: blue;
+}
diff --git a/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.js b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.js
new file mode 100644
index 0000000000..531f167aa1
--- /dev/null
+++ b/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/wwwroot/libs/lib2/lib2.js
@@ -0,0 +1,3 @@
+(function() {
+    //lib2-js-content
+})();
\ No newline at end of file