mirror of
https://github.com/aspnet/JavaScriptServices.git
synced 2025-12-23 18:19:40 +00:00
Merge remote-tracking branch 'aspnet/dev' into dev
This commit is contained in:
16
README.md
16
README.md
@@ -24,10 +24,22 @@ Everything here is cross-platform, and works with .NET Core 1.0 RC2 or later on
|
|||||||
|
|
||||||
## Creating new applications
|
## Creating new applications
|
||||||
|
|
||||||
If you want to build a brand-new ASP.NET Core app that uses Angular 2 / React / Knockout on the client, consider starting with the `aspnetcore-spa` generator. This lets you choose your client-side framework, and generates a starting point that includes applicable features such as Webpack dev middleware, server-side prerendering, and efficient production builds.
|
If you want to build a brand-new ASP.NET Core app that uses Angular 2 / React / Knockout on the client, consider starting with the `aspnetcore-spa` generator. This lets you choose your client-side framework, and generates a starting point that includes applicable features such as Webpack dev middleware, server-side prerendering, and efficient production builds. It's much easier than configuring everything to work together manually!
|
||||||
|
|
||||||
See: [getting started with the `aspnetcore-spa` generator](http://blog.stevensanderson.com/2016/05/02/angular2-react-knockout-apps-on-aspnet-core/). It's much easier than configuring everything to work together manually!
|
To do this, first install Yeoman and these generator templates:
|
||||||
|
|
||||||
|
npm install -g yo generator-aspnetcore-spa
|
||||||
|
|
||||||
|
Then you can generate your new application starting point:
|
||||||
|
|
||||||
|
cd some-empty-directory
|
||||||
|
yo aspnetcore-spa
|
||||||
|
|
||||||
|
Finally, once the generator has run and restored all the dependencies, you can start up your new ASP.NET Core Single Page Application:
|
||||||
|
|
||||||
|
dotnet run
|
||||||
|
|
||||||
|
For a more detailed walkthrough, see [getting started with the `aspnetcore-spa` generator](http://blog.stevensanderson.com/2016/05/02/angular2-react-knockout-apps-on-aspnet-core/).
|
||||||
|
|
||||||
## Adding to existing applications
|
## Adding to existing applications
|
||||||
|
|
||||||
|
|||||||
@@ -68,10 +68,12 @@ namespace Microsoft.AspNetCore.NodeServices
|
|||||||
switch (options.HostingModel)
|
switch (options.HostingModel)
|
||||||
{
|
{
|
||||||
case NodeHostingModel.Http:
|
case NodeHostingModel.Http:
|
||||||
return new HttpNodeInstance(options.ProjectPath, options.WatchFileExtensions, logger, /* port */ 0);
|
return new HttpNodeInstance(options.ProjectPath, options.WatchFileExtensions, logger,
|
||||||
|
options.LaunchWithDebugging, options.DebuggingPort, /* port */ 0);
|
||||||
case NodeHostingModel.Socket:
|
case NodeHostingModel.Socket:
|
||||||
var pipeName = "pni-" + Guid.NewGuid().ToString("D"); // Arbitrary non-clashing string
|
var pipeName = "pni-" + Guid.NewGuid().ToString("D"); // Arbitrary non-clashing string
|
||||||
return new SocketNodeInstance(options.ProjectPath, options.WatchFileExtensions, pipeName, logger);
|
return new SocketNodeInstance(options.ProjectPath, options.WatchFileExtensions, pipeName, logger,
|
||||||
|
options.LaunchWithDebugging, options.DebuggingPort);
|
||||||
default:
|
default:
|
||||||
throw new ArgumentException("Unknown hosting model: " + options.HostingModel);
|
throw new ArgumentException("Unknown hosting model: " + options.HostingModel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,5 +21,7 @@ namespace Microsoft.AspNetCore.NodeServices
|
|||||||
public string ProjectPath { get; set; }
|
public string ProjectPath { get; set; }
|
||||||
public string[] WatchFileExtensions { get; set; }
|
public string[] WatchFileExtensions { get; set; }
|
||||||
public ILogger NodeInstanceOutputLogger { get; set; }
|
public ILogger NodeInstanceOutputLogger { get; set; }
|
||||||
|
public bool LaunchWithDebugging { get; set; }
|
||||||
|
public int? DebuggingPort { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -33,15 +33,18 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
private bool _disposed;
|
private bool _disposed;
|
||||||
private int _portNumber;
|
private int _portNumber;
|
||||||
|
|
||||||
public HttpNodeInstance(string projectPath, string[] watchFileExtensions, ILogger nodeInstanceOutputLogger, int port = 0)
|
public HttpNodeInstance(string projectPath, string[] watchFileExtensions, ILogger nodeInstanceOutputLogger,
|
||||||
: base(
|
bool launchWithDebugging, int? debuggingPort, int port = 0)
|
||||||
|
: base(
|
||||||
EmbeddedResourceReader.Read(
|
EmbeddedResourceReader.Read(
|
||||||
typeof(HttpNodeInstance),
|
typeof(HttpNodeInstance),
|
||||||
"/Content/Node/entrypoint-http.js"),
|
"/Content/Node/entrypoint-http.js"),
|
||||||
projectPath,
|
projectPath,
|
||||||
watchFileExtensions,
|
watchFileExtensions,
|
||||||
MakeCommandLineOptions(port),
|
MakeCommandLineOptions(port),
|
||||||
nodeInstanceOutputLogger)
|
nodeInstanceOutputLogger,
|
||||||
|
launchWithDebugging,
|
||||||
|
debuggingPort)
|
||||||
{
|
{
|
||||||
_client = new HttpClient();
|
_client = new HttpClient();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,11 +21,22 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
{
|
{
|
||||||
protected readonly ILogger OutputLogger;
|
protected readonly ILogger OutputLogger;
|
||||||
private const string ConnectionEstablishedMessage = "[Microsoft.AspNetCore.NodeServices:Listening]";
|
private const string ConnectionEstablishedMessage = "[Microsoft.AspNetCore.NodeServices:Listening]";
|
||||||
|
private const string DebuggingStartedMessageFormat = @"-----
|
||||||
|
*** Node.js debugging is enabled ***
|
||||||
|
{0}
|
||||||
|
|
||||||
|
To debug, run:
|
||||||
|
node-inspector{1}
|
||||||
|
|
||||||
|
If you haven't yet installed node-inspector, you can do so as follows:
|
||||||
|
npm install -g node-inspector
|
||||||
|
-----";
|
||||||
private readonly TaskCompletionSource<object> _connectionIsReadySource = new TaskCompletionSource<object>();
|
private readonly TaskCompletionSource<object> _connectionIsReadySource = new TaskCompletionSource<object>();
|
||||||
private bool _disposed;
|
private bool _disposed;
|
||||||
private readonly StringAsTempFile _entryPointScript;
|
private readonly StringAsTempFile _entryPointScript;
|
||||||
private FileSystemWatcher _fileSystemWatcher;
|
private FileSystemWatcher _fileSystemWatcher;
|
||||||
private readonly Process _nodeProcess;
|
private readonly Process _nodeProcess;
|
||||||
|
private int? _nodeDebuggingPort;
|
||||||
private bool _nodeProcessNeedsRestart;
|
private bool _nodeProcessNeedsRestart;
|
||||||
private readonly string[] _watchFileExtensions;
|
private readonly string[] _watchFileExtensions;
|
||||||
|
|
||||||
@@ -34,7 +45,9 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
string projectPath,
|
string projectPath,
|
||||||
string[] watchFileExtensions,
|
string[] watchFileExtensions,
|
||||||
string commandLineArguments,
|
string commandLineArguments,
|
||||||
ILogger nodeOutputLogger)
|
ILogger nodeOutputLogger,
|
||||||
|
bool launchWithDebugging,
|
||||||
|
int? debuggingPort)
|
||||||
{
|
{
|
||||||
if (nodeOutputLogger == null)
|
if (nodeOutputLogger == null)
|
||||||
{
|
{
|
||||||
@@ -43,8 +56,9 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
|
|
||||||
OutputLogger = nodeOutputLogger;
|
OutputLogger = nodeOutputLogger;
|
||||||
_entryPointScript = new StringAsTempFile(entryPointScript);
|
_entryPointScript = new StringAsTempFile(entryPointScript);
|
||||||
|
|
||||||
var startInfo = PrepareNodeProcessStartInfo(_entryPointScript.FileName, projectPath, commandLineArguments);
|
var startInfo = PrepareNodeProcessStartInfo(_entryPointScript.FileName, projectPath, commandLineArguments,
|
||||||
|
launchWithDebugging, debuggingPort);
|
||||||
_nodeProcess = LaunchNodeProcess(startInfo);
|
_nodeProcess = LaunchNodeProcess(startInfo);
|
||||||
_watchFileExtensions = watchFileExtensions;
|
_watchFileExtensions = watchFileExtensions;
|
||||||
_fileSystemWatcher = BeginFileWatcher(projectPath);
|
_fileSystemWatcher = BeginFileWatcher(projectPath);
|
||||||
@@ -84,11 +98,23 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
|
|
||||||
// This method is virtual, as it provides a way to override the NODE_PATH or the path to node.exe
|
// This method is virtual, as it provides a way to override the NODE_PATH or the path to node.exe
|
||||||
protected virtual ProcessStartInfo PrepareNodeProcessStartInfo(
|
protected virtual ProcessStartInfo PrepareNodeProcessStartInfo(
|
||||||
string entryPointFilename, string projectPath, string commandLineArguments)
|
string entryPointFilename, string projectPath, string commandLineArguments,
|
||||||
|
bool launchWithDebugging, int? debuggingPort)
|
||||||
{
|
{
|
||||||
|
string debuggingArgs;
|
||||||
|
if (launchWithDebugging)
|
||||||
|
{
|
||||||
|
debuggingArgs = debuggingPort.HasValue ? $"--debug={debuggingPort.Value} " : "--debug ";
|
||||||
|
_nodeDebuggingPort = debuggingPort;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
debuggingArgs = string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
var startInfo = new ProcessStartInfo("node")
|
var startInfo = new ProcessStartInfo("node")
|
||||||
{
|
{
|
||||||
Arguments = "\"" + entryPointFilename + "\" " + (commandLineArguments ?? string.Empty),
|
Arguments = debuggingArgs + "\"" + entryPointFilename + "\" " + (commandLineArguments ?? string.Empty),
|
||||||
UseShellExecute = false,
|
UseShellExecute = false,
|
||||||
RedirectStandardInput = true,
|
RedirectStandardInput = true,
|
||||||
RedirectStandardOutput = true,
|
RedirectStandardOutput = true,
|
||||||
@@ -100,7 +126,7 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
var existingNodePath = Environment.GetEnvironmentVariable("NODE_PATH") ?? string.Empty;
|
var existingNodePath = Environment.GetEnvironmentVariable("NODE_PATH") ?? string.Empty;
|
||||||
if (existingNodePath != string.Empty)
|
if (existingNodePath != string.Empty)
|
||||||
{
|
{
|
||||||
existingNodePath += ":";
|
existingNodePath += Path.PathSeparator;
|
||||||
}
|
}
|
||||||
|
|
||||||
var nodePathValue = existingNodePath + Path.Combine(projectPath, "node_modules");
|
var nodePathValue = existingNodePath + Path.Combine(projectPath, "node_modules");
|
||||||
@@ -201,7 +227,12 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
{
|
{
|
||||||
if (evt.Data != null)
|
if (evt.Data != null)
|
||||||
{
|
{
|
||||||
if (!initializationIsCompleted)
|
if (IsDebuggerListeningMessage(evt.Data))
|
||||||
|
{
|
||||||
|
var debugPortArg = _nodeDebuggingPort.HasValue ? $" --debug-port={_nodeDebuggingPort.Value}" : string.Empty;
|
||||||
|
OutputLogger.LogWarning(string.Format(DebuggingStartedMessageFormat, evt.Data, debugPortArg));
|
||||||
|
}
|
||||||
|
else if (!initializationIsCompleted)
|
||||||
{
|
{
|
||||||
_connectionIsReadySource.SetException(
|
_connectionIsReadySource.SetException(
|
||||||
new InvalidOperationException("The Node.js process failed to initialize: " + evt.Data));
|
new InvalidOperationException("The Node.js process failed to initialize: " + evt.Data));
|
||||||
@@ -218,6 +249,11 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
_nodeProcess.BeginErrorReadLine();
|
_nodeProcess.BeginErrorReadLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsDebuggerListeningMessage(string message)
|
||||||
|
{
|
||||||
|
return message.StartsWith("Debugger listening ", StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
private FileSystemWatcher BeginFileWatcher(string rootDir)
|
private FileSystemWatcher BeginFileWatcher(string rootDir)
|
||||||
{
|
{
|
||||||
if (_watchFileExtensions == null || _watchFileExtensions.Length == 0)
|
if (_watchFileExtensions == null || _watchFileExtensions.Length == 0)
|
||||||
|
|||||||
@@ -37,14 +37,18 @@ namespace Microsoft.AspNetCore.NodeServices.HostingModels
|
|||||||
private string _socketAddress;
|
private string _socketAddress;
|
||||||
private VirtualConnectionClient _virtualConnectionClient;
|
private VirtualConnectionClient _virtualConnectionClient;
|
||||||
|
|
||||||
public SocketNodeInstance(string projectPath, string[] watchFileExtensions, string socketAddress, ILogger nodeInstanceOutputLogger) : base(
|
public SocketNodeInstance(string projectPath, string[] watchFileExtensions, string socketAddress,
|
||||||
|
ILogger nodeInstanceOutputLogger, bool launchWithDebugging, int? debuggingPort)
|
||||||
|
: base(
|
||||||
EmbeddedResourceReader.Read(
|
EmbeddedResourceReader.Read(
|
||||||
typeof(SocketNodeInstance),
|
typeof(SocketNodeInstance),
|
||||||
"/Content/Node/entrypoint-socket.js"),
|
"/Content/Node/entrypoint-socket.js"),
|
||||||
projectPath,
|
projectPath,
|
||||||
watchFileExtensions,
|
watchFileExtensions,
|
||||||
MakeNewCommandLineOptions(socketAddress),
|
MakeNewCommandLineOptions(socketAddress),
|
||||||
nodeInstanceOutputLogger)
|
nodeInstanceOutputLogger,
|
||||||
|
launchWithDebugging,
|
||||||
|
debuggingPort)
|
||||||
{
|
{
|
||||||
_socketAddress = socketAddress;
|
_socketAddress = socketAddress;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ namespace Microsoft.AspNetCore.Builder
|
|||||||
public static class WebpackDevMiddleware
|
public static class WebpackDevMiddleware
|
||||||
{
|
{
|
||||||
private const string WebpackDevMiddlewareScheme = "http";
|
private const string WebpackDevMiddlewareScheme = "http";
|
||||||
private const string WebpackDevMiddlewareHostname = "localhost";
|
|
||||||
private const string WebpackHotMiddlewareEndpoint = "/__webpack_hmr";
|
private const string WebpackHotMiddlewareEndpoint = "/__webpack_hmr";
|
||||||
private const string DefaultConfigFile = "webpack.config.js";
|
private const string DefaultConfigFile = "webpack.config.js";
|
||||||
|
|
||||||
@@ -64,19 +63,27 @@ namespace Microsoft.AspNetCore.Builder
|
|||||||
JsonConvert.SerializeObject(devServerOptions)).Result;
|
JsonConvert.SerializeObject(devServerOptions)).Result;
|
||||||
|
|
||||||
// Proxy the corresponding requests through ASP.NET and into the Node listener
|
// Proxy the corresponding requests through ASP.NET and into the Node listener
|
||||||
|
// Note that this is hardcoded to make requests to "localhost" regardless of the hostname of the
|
||||||
|
// server as far as the client is concerned. This is because ConditionalProxyMiddlewareOptions is
|
||||||
|
// the one making the internal HTTP requests, and it's going to be to some port on this machine
|
||||||
|
// because aspnet-webpack hosts the dev server there. We can't use the hostname that the client
|
||||||
|
// sees, because that could be anything (e.g., some upstream load balancer) and we might not be
|
||||||
|
// able to make outbound requests to it from here.
|
||||||
var proxyOptions = new ConditionalProxyMiddlewareOptions(WebpackDevMiddlewareScheme,
|
var proxyOptions = new ConditionalProxyMiddlewareOptions(WebpackDevMiddlewareScheme,
|
||||||
WebpackDevMiddlewareHostname, devServerInfo.Port.ToString());
|
"localhost", devServerInfo.Port.ToString());
|
||||||
appBuilder.UseMiddleware<ConditionalProxyMiddleware>(devServerInfo.PublicPath, proxyOptions);
|
appBuilder.UseMiddleware<ConditionalProxyMiddleware>(devServerInfo.PublicPath, proxyOptions);
|
||||||
|
|
||||||
// While it would be nice to proxy the /__webpack_hmr requests too, these return an EventStream,
|
// While it would be nice to proxy the /__webpack_hmr requests too, these return an EventStream,
|
||||||
// and the Microsoft.AspNetCore.Proxy code doesn't handle that entirely - it throws an exception after
|
// and the Microsoft.AspNetCore.Proxy code doesn't handle that entirely - it throws an exception after
|
||||||
// a while. So, just serve a 302 for those.
|
// a while. So, just serve a 302 for those. But note that we must use the hostname that the client
|
||||||
|
// sees, not "localhost", so that it works even when you're not running on localhost (e.g., Docker).
|
||||||
appBuilder.Map(WebpackHotMiddlewareEndpoint, builder =>
|
appBuilder.Map(WebpackHotMiddlewareEndpoint, builder =>
|
||||||
{
|
{
|
||||||
builder.Use(next => async ctx =>
|
builder.Use(next => async ctx =>
|
||||||
{
|
{
|
||||||
|
var hostname = ctx.Request.Host.Host;
|
||||||
ctx.Response.Redirect(
|
ctx.Response.Redirect(
|
||||||
$"{WebpackDevMiddlewareScheme}://{WebpackDevMiddlewareHostname}:{devServerInfo.Port.ToString()}{WebpackHotMiddlewareEndpoint}");
|
$"{WebpackDevMiddlewareScheme}://{hostname}:{devServerInfo.Port.ToString()}{WebpackHotMiddlewareEndpoint}");
|
||||||
await Task.Yield();
|
await Task.Yield();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ namespace Microsoft.AspNetCore.SpaServices.Webpack
|
|||||||
public class WebpackDevMiddlewareOptions
|
public class WebpackDevMiddlewareOptions
|
||||||
{
|
{
|
||||||
public bool HotModuleReplacement { get; set; }
|
public bool HotModuleReplacement { get; set; }
|
||||||
|
public int HotModuleReplacementServerPort { get; set; }
|
||||||
public bool ReactHotModuleReplacement { get; set; }
|
public bool ReactHotModuleReplacement { get; set; }
|
||||||
public string ConfigFile { get; set; }
|
public string ConfigFile { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "aspnet-webpack",
|
"name": "aspnet-webpack",
|
||||||
"version": "1.0.6",
|
"version": "1.0.9",
|
||||||
"description": "Helpers for using Webpack in ASP.NET Core projects. Works in conjunction with the Microsoft.AspNetCore.SpaServices NuGet package.",
|
"description": "Helpers for using Webpack in ASP.NET Core projects. Works in conjunction with the Microsoft.AspNetCore.SpaServices NuGet package.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -35,6 +35,12 @@ export function loadViaWebpack<T>(webpackConfigPath: string, modulePath: string,
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setExtension(filePath: string, newExtension: string) {
|
||||||
|
const oldExtensionIfAny = path.extname(filePath);
|
||||||
|
const basenameWithoutExtension = path.basename(filePath, oldExtensionIfAny);
|
||||||
|
return path.join(path.dirname(filePath), basenameWithoutExtension) + newExtension;
|
||||||
|
}
|
||||||
|
|
||||||
function loadViaWebpackNoCache<T>(webpackConfigPath: string, modulePath: string) {
|
function loadViaWebpackNoCache<T>(webpackConfigPath: string, modulePath: string) {
|
||||||
return new Promise<T>((resolve, reject) => {
|
return new Promise<T>((resolve, reject) => {
|
||||||
// Load the Webpack config and make alterations needed for loading the output into Node
|
// Load the Webpack config and make alterations needed for loading the output into Node
|
||||||
@@ -94,8 +100,13 @@ function loadViaWebpackNoCache<T>(webpackConfigPath: string, modulePath: string)
|
|||||||
+ stats.toString({ chunks: false }));
|
+ stats.toString({ chunks: false }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The dynamically-built module will only appear in node-inspector if it has some nonempty
|
||||||
|
// file path. The following value is arbitrary (since there's no real compiled file on disk)
|
||||||
|
// but is sufficient to enable debugging.
|
||||||
|
const fakeModulePath = setExtension(modulePath, '.js');
|
||||||
|
|
||||||
const fileContent = compiler.outputFileSystem.readFileSync(outputVirtualPath, 'utf8');
|
const fileContent = compiler.outputFileSystem.readFileSync(outputVirtualPath, 'utf8');
|
||||||
const moduleInstance = requireFromString<T>(fileContent);
|
const moduleInstance = requireFromString<T>(fileContent, fakeModulePath);
|
||||||
resolve(moduleInstance);
|
resolve(moduleInstance);
|
||||||
} catch(ex) {
|
} catch(ex) {
|
||||||
reject(ex);
|
reject(ex);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ interface CreateDevServerOptions {
|
|||||||
// These are the options configured in C# and then JSON-serialized, hence the C#-style naming
|
// These are the options configured in C# and then JSON-serialized, hence the C#-style naming
|
||||||
interface DevServerOptions {
|
interface DevServerOptions {
|
||||||
HotModuleReplacement: boolean;
|
HotModuleReplacement: boolean;
|
||||||
|
HotModuleReplacementServerPort: number;
|
||||||
ReactHotModuleReplacement: boolean;
|
ReactHotModuleReplacement: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -35,9 +36,11 @@ export function createWebpackDevServer(callback: CreateDevServerCallback, option
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The default value, 0, means 'choose randomly'
|
||||||
|
const suggestedHMRPortOrZero = options.suppliedOptions.HotModuleReplacementServerPort || 0;
|
||||||
|
|
||||||
const app = connect();
|
const app = connect();
|
||||||
const defaultPort = 0; // 0 means 'choose randomly'. Could allow an explicit value to be supplied instead.
|
const listener = app.listen(suggestedHMRPortOrZero, () => {
|
||||||
const listener = app.listen(defaultPort, () => {
|
|
||||||
// Build the final Webpack config based on supplied options
|
// Build the final Webpack config based on supplied options
|
||||||
if (enableHotModuleReplacement) {
|
if (enableHotModuleReplacement) {
|
||||||
// TODO: Stop assuming there's an entry point called 'main'
|
// TODO: Stop assuming there's an entry point called 'main'
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
export namespace requirefromstring {
|
export namespace requirefromstring {
|
||||||
export function requireFromString<T>(fileContent: string): T;
|
export function requireFromString<T>(fileContent: string, filename?: string): T;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import 'es6-shim';
|
||||||
require('zone.js');
|
require('zone.js');
|
||||||
import 'bootstrap';
|
import 'bootstrap';
|
||||||
import 'reflect-metadata';
|
import 'reflect-metadata';
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { FetchData } from './components/fetch-data/fetch-data';
|
|||||||
import { Counter } from './components/counter/counter';
|
import { Counter } from './components/counter/counter';
|
||||||
|
|
||||||
export const routes: RouterConfig = [
|
export const routes: RouterConfig = [
|
||||||
{ path: '', redirectTo: 'home' },
|
{ path: '', redirectTo: 'home', pathMatch: 'full' },
|
||||||
{ path: 'home', component: Home },
|
{ path: 'home', component: Home },
|
||||||
{ path: 'counter', component: Counter },
|
{ path: 'counter', component: Counter },
|
||||||
{ path: 'fetch-data', component: FetchData },
|
{ path: 'fetch-data', component: FetchData },
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
FROM microsoft/aspnet:1.0.0-rc1-update1
|
FROM microsoft/dotnet:latest
|
||||||
|
|
||||||
RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list
|
RUN apt-get update
|
||||||
RUN apt-get -qq update && apt-get install -qqy sqlite3 libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
RUN apt-get install -y build-essential nodejs nodejs-legacy
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY project.json .
|
||||||
|
RUN ["dotnet", "restore"]
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
RUN ["dotnet", "build"]
|
||||||
RUN ["dnu", "restore"]
|
|
||||||
|
|
||||||
EXPOSE 5000/tcp
|
EXPOSE 5000/tcp
|
||||||
ENTRYPOINT ["dnx", "-p", "project.json", "web"]
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"]
|
||||||
|
|||||||
31
templates/Angular2Spa/Program.cs
Normal file
31
templates/Angular2Spa/Program.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
|
namespace WebApplicationBasic
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var config = new ConfigurationBuilder()
|
||||||
|
.AddCommandLine(args)
|
||||||
|
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var host = new WebHostBuilder()
|
||||||
|
.UseConfiguration(config)
|
||||||
|
.UseKestrel()
|
||||||
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
|
.UseIISIntegration()
|
||||||
|
.UseStartup<Startup>()
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
host.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,42 +1,57 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.SpaServices.Webpack;
|
using Microsoft.AspNetCore.SpaServices.Webpack;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
|
|
||||||
namespace WebApplicationBasic
|
namespace WebApplicationBasic
|
||||||
{
|
{
|
||||||
public class Startup
|
public class Startup
|
||||||
{
|
{
|
||||||
|
public Startup(IHostingEnvironment env)
|
||||||
|
{
|
||||||
|
var builder = new ConfigurationBuilder()
|
||||||
|
.SetBasePath(env.ContentRootPath)
|
||||||
|
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
||||||
|
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
|
||||||
|
.AddEnvironmentVariables();
|
||||||
|
Configuration = builder.Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IConfigurationRoot Configuration { get; }
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddMvc().AddJsonOptions(options =>
|
// Add framework services.
|
||||||
{
|
services.AddMvc();
|
||||||
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory, IHostingEnvironment env)
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
||||||
{
|
{
|
||||||
app.UseDeveloperExceptionPage();
|
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
|
||||||
|
loggerFactory.AddDebug();
|
||||||
|
|
||||||
if (env.IsDevelopment()) {
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseDeveloperExceptionPage();
|
||||||
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
|
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
|
||||||
HotModuleReplacement = true
|
HotModuleReplacement = true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Home/Error");
|
||||||
|
}
|
||||||
|
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
loggerFactory.AddConsole();
|
|
||||||
app.UseMvc(routes =>
|
app.UseMvc(routes =>
|
||||||
{
|
{
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
@@ -48,17 +63,5 @@ namespace WebApplicationBasic
|
|||||||
defaults: new { controller = "Home", action = "Index" });
|
defaults: new { controller = "Home", action = "Index" });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
var host = new WebHostBuilder()
|
|
||||||
.UseContentRoot(Directory.GetCurrentDirectory())
|
|
||||||
.UseIISIntegration()
|
|
||||||
.UseKestrel()
|
|
||||||
.UseStartup<Startup>()
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
host.Run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"Logging": {
|
"Logging": {
|
||||||
"IncludeScopes": false,
|
"IncludeScopes": false,
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Verbose",
|
"Default": "Debug",
|
||||||
"System": "Information",
|
"System": "Information",
|
||||||
"Microsoft": "Information"
|
"Microsoft": "Information"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"name": "WebApplicationBasic",
|
"name": "WebApplicationBasic",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"aspnet-webpack": "^1.0.6",
|
||||||
"bootstrap": "^3.3.6",
|
"bootstrap": "^3.3.6",
|
||||||
"css-loader": "^0.23.1",
|
"css-loader": "^0.23.1",
|
||||||
"expose-loader": "^0.7.1",
|
"expose-loader": "^0.7.1",
|
||||||
@@ -18,18 +19,18 @@
|
|||||||
"webpack-hot-middleware": "^2.10.0"
|
"webpack-hot-middleware": "^2.10.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/common": "2.0.0-rc.3",
|
"@angular/common": "2.0.0-rc.4",
|
||||||
"@angular/compiler": "2.0.0-rc.3",
|
"@angular/compiler": "2.0.0-rc.4",
|
||||||
"@angular/core": "2.0.0-rc.3",
|
"@angular/core": "2.0.0-rc.4",
|
||||||
"@angular/http": "2.0.0-rc.3",
|
"@angular/http": "2.0.0-rc.4",
|
||||||
"@angular/platform-browser": "2.0.0-rc.3",
|
"@angular/platform-browser": "2.0.0-rc.4",
|
||||||
"@angular/platform-browser-dynamic": "2.0.0-rc.3",
|
"@angular/platform-browser-dynamic": "2.0.0-rc.4",
|
||||||
"@angular/platform-server": "2.0.0-rc.3",
|
"@angular/platform-server": "2.0.0-rc.4",
|
||||||
"@angular/router": "3.0.0-alpha.8",
|
"@angular/router": "3.0.0-beta.2",
|
||||||
"angular2-universal": "^0.104.1",
|
"angular2-universal": "^0.104.5",
|
||||||
"aspnet-prerendering": "^1.0.2",
|
"aspnet-prerendering": "^1.0.2",
|
||||||
"aspnet-webpack": "^1.0.1",
|
|
||||||
"css": "^2.2.1",
|
"css": "^2.2.1",
|
||||||
|
"es6-shim": "^0.35.1",
|
||||||
"isomorphic-fetch": "^2.2.1",
|
"isomorphic-fetch": "^2.2.1",
|
||||||
"preboot": "^2.0.10",
|
"preboot": "^2.0.10",
|
||||||
"rxjs": "5.0.0-beta.6",
|
"rxjs": "5.0.0-beta.6",
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"type": "platform"
|
"type": "platform"
|
||||||
},
|
},
|
||||||
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.AngularServices": "1.0.0-*",
|
"Microsoft.AspNetCore.AngularServices": "1.0.0-*",
|
||||||
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
||||||
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
||||||
@@ -17,46 +16,16 @@
|
|||||||
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging": "1.0.0",
|
"Microsoft.Extensions.Logging": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"tools": {
|
"tools": {
|
||||||
"Microsoft.AspNetCore.Razor.Tools": {
|
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
|
||||||
"version": "1.0.0-preview2-final",
|
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.EntityFrameworkCore.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.Extensions.SecretManager.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
|
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -64,14 +33,12 @@
|
|||||||
"netcoreapp1.0": {
|
"netcoreapp1.0": {
|
||||||
"imports": [
|
"imports": [
|
||||||
"dotnet5.6",
|
"dotnet5.6",
|
||||||
"dnxcore50",
|
|
||||||
"portable-net45+win8"
|
"portable-net45+win8"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"buildOptions": {
|
"buildOptions": {
|
||||||
"debugType": "portable",
|
|
||||||
"emitEntryPoint": true,
|
"emitEntryPoint": true,
|
||||||
"preserveCompilationContext": true
|
"preserveCompilationContext": true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ module.exports = {
|
|||||||
vendor: [
|
vendor: [
|
||||||
'bootstrap',
|
'bootstrap',
|
||||||
'bootstrap/dist/css/bootstrap.css',
|
'bootstrap/dist/css/bootstrap.css',
|
||||||
|
'es6-shim',
|
||||||
'style-loader',
|
'style-loader',
|
||||||
'jquery',
|
'jquery',
|
||||||
'@angular/common',
|
'@angular/common',
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
FROM microsoft/aspnet:1.0.0-rc1-update1
|
FROM microsoft/dotnet:latest
|
||||||
|
|
||||||
RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list
|
RUN apt-get update
|
||||||
RUN apt-get -qq update && apt-get install -qqy sqlite3 libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
RUN apt-get install -y build-essential nodejs nodejs-legacy
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY project.json .
|
||||||
|
RUN ["dotnet", "restore"]
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
RUN ["dotnet", "build"]
|
||||||
RUN ["dnu", "restore"]
|
|
||||||
|
|
||||||
EXPOSE 5000/tcp
|
EXPOSE 5000/tcp
|
||||||
ENTRYPOINT ["dnx", "-p", "project.json", "web"]
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"]
|
||||||
|
|||||||
31
templates/KnockoutSpa/Program.cs
Normal file
31
templates/KnockoutSpa/Program.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
|
namespace WebApplicationBasic
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var config = new ConfigurationBuilder()
|
||||||
|
.AddCommandLine(args)
|
||||||
|
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var host = new WebHostBuilder()
|
||||||
|
.UseConfiguration(config)
|
||||||
|
.UseKestrel()
|
||||||
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
|
.UseIISIntegration()
|
||||||
|
.UseStartup<Startup>()
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
host.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,42 +1,57 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.SpaServices.Webpack;
|
using Microsoft.AspNetCore.SpaServices.Webpack;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
|
|
||||||
namespace WebApplicationBasic
|
namespace WebApplicationBasic
|
||||||
{
|
{
|
||||||
public class Startup
|
public class Startup
|
||||||
{
|
{
|
||||||
|
public Startup(IHostingEnvironment env)
|
||||||
|
{
|
||||||
|
var builder = new ConfigurationBuilder()
|
||||||
|
.SetBasePath(env.ContentRootPath)
|
||||||
|
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
||||||
|
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
|
||||||
|
.AddEnvironmentVariables();
|
||||||
|
Configuration = builder.Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IConfigurationRoot Configuration { get; }
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddMvc().AddJsonOptions(options =>
|
// Add framework services.
|
||||||
{
|
services.AddMvc();
|
||||||
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory, IHostingEnvironment env)
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
||||||
{
|
{
|
||||||
app.UseDeveloperExceptionPage();
|
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
|
||||||
|
loggerFactory.AddDebug();
|
||||||
|
|
||||||
if (env.IsDevelopment()) {
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseDeveloperExceptionPage();
|
||||||
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
|
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
|
||||||
HotModuleReplacement = true
|
HotModuleReplacement = true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Home/Error");
|
||||||
|
}
|
||||||
|
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
loggerFactory.AddConsole();
|
|
||||||
app.UseMvc(routes =>
|
app.UseMvc(routes =>
|
||||||
{
|
{
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
@@ -48,17 +63,5 @@ namespace WebApplicationBasic
|
|||||||
defaults: new { controller = "Home", action = "Index" });
|
defaults: new { controller = "Home", action = "Index" });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
var host = new WebHostBuilder()
|
|
||||||
.UseContentRoot(Directory.GetCurrentDirectory())
|
|
||||||
.UseIISIntegration()
|
|
||||||
.UseKestrel()
|
|
||||||
.UseStartup<Startup>()
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
host.Run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"Logging": {
|
"Logging": {
|
||||||
"IncludeScopes": false,
|
"IncludeScopes": false,
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Verbose",
|
"Default": "Debug",
|
||||||
"System": "Information",
|
"System": "Information",
|
||||||
"Microsoft": "Information"
|
"Microsoft": "Information"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "WebApplicationBasic",
|
"name": "WebApplicationBasic",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"aspnet-webpack": "^1.0.0",
|
"aspnet-webpack": "^1.0.6",
|
||||||
"bootstrap": "^3.3.6",
|
"bootstrap": "^3.3.6",
|
||||||
"bundle-loader": "^0.5.4",
|
"bundle-loader": "^0.5.4",
|
||||||
"crossroads": "^0.12.2",
|
"crossroads": "^0.12.2",
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"type": "platform"
|
"type": "platform"
|
||||||
},
|
},
|
||||||
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.SpaServices": "1.0.0-*",
|
"Microsoft.AspNetCore.SpaServices": "1.0.0-*",
|
||||||
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
||||||
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
||||||
@@ -17,46 +16,16 @@
|
|||||||
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging": "1.0.0",
|
"Microsoft.Extensions.Logging": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"tools": {
|
"tools": {
|
||||||
"Microsoft.AspNetCore.Razor.Tools": {
|
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
|
||||||
"version": "1.0.0-preview2-final",
|
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.EntityFrameworkCore.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.Extensions.SecretManager.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
|
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -64,14 +33,12 @@
|
|||||||
"netcoreapp1.0": {
|
"netcoreapp1.0": {
|
||||||
"imports": [
|
"imports": [
|
||||||
"dotnet5.6",
|
"dotnet5.6",
|
||||||
"dnxcore50",
|
|
||||||
"portable-net45+win8"
|
"portable-net45+win8"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"buildOptions": {
|
"buildOptions": {
|
||||||
"debugType": "portable",
|
|
||||||
"emitEntryPoint": true,
|
"emitEntryPoint": true,
|
||||||
"preserveCompilationContext": true
|
"preserveCompilationContext": true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
FROM microsoft/aspnet:1.0.0-rc1-update1
|
FROM microsoft/dotnet:latest
|
||||||
|
|
||||||
RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list
|
RUN apt-get update
|
||||||
RUN apt-get -qq update && apt-get install -qqy sqlite3 libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
RUN apt-get install -y build-essential nodejs nodejs-legacy
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY project.json .
|
||||||
|
RUN ["dotnet", "restore"]
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
RUN ["dotnet", "build"]
|
||||||
RUN ["dnu", "restore"]
|
|
||||||
|
|
||||||
EXPOSE 5000/tcp
|
EXPOSE 5000/tcp
|
||||||
ENTRYPOINT ["dnx", "-p", "project.json", "web"]
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"]
|
||||||
|
|||||||
31
templates/ReactReduxSpa/Program.cs
Normal file
31
templates/ReactReduxSpa/Program.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
|
namespace WebApplicationBasic
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var config = new ConfigurationBuilder()
|
||||||
|
.AddCommandLine(args)
|
||||||
|
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var host = new WebHostBuilder()
|
||||||
|
.UseConfiguration(config)
|
||||||
|
.UseKestrel()
|
||||||
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
|
.UseIISIntegration()
|
||||||
|
.UseStartup<Startup>()
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
host.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,43 +1,58 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.SpaServices.Webpack;
|
using Microsoft.AspNetCore.SpaServices.Webpack;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
|
|
||||||
namespace WebApplicationBasic
|
namespace WebApplicationBasic
|
||||||
{
|
{
|
||||||
public class Startup
|
public class Startup
|
||||||
{
|
{
|
||||||
|
public Startup(IHostingEnvironment env)
|
||||||
|
{
|
||||||
|
var builder = new ConfigurationBuilder()
|
||||||
|
.SetBasePath(env.ContentRootPath)
|
||||||
|
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
||||||
|
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
|
||||||
|
.AddEnvironmentVariables();
|
||||||
|
Configuration = builder.Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IConfigurationRoot Configuration { get; }
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddMvc().AddJsonOptions(options =>
|
// Add framework services.
|
||||||
{
|
services.AddMvc();
|
||||||
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory, IHostingEnvironment env)
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
||||||
{
|
{
|
||||||
app.UseDeveloperExceptionPage();
|
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
|
||||||
|
loggerFactory.AddDebug();
|
||||||
|
|
||||||
if (env.IsDevelopment()) {
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseDeveloperExceptionPage();
|
||||||
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
|
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
|
||||||
HotModuleReplacement = true,
|
HotModuleReplacement = true,
|
||||||
ReactHotModuleReplacement = true
|
ReactHotModuleReplacement = true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Home/Error");
|
||||||
|
}
|
||||||
|
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
loggerFactory.AddConsole();
|
|
||||||
app.UseMvc(routes =>
|
app.UseMvc(routes =>
|
||||||
{
|
{
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
@@ -49,17 +64,5 @@ namespace WebApplicationBasic
|
|||||||
defaults: new { controller = "Home", action = "Index" });
|
defaults: new { controller = "Home", action = "Index" });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
var host = new WebHostBuilder()
|
|
||||||
.UseContentRoot(Directory.GetCurrentDirectory())
|
|
||||||
.UseIISIntegration()
|
|
||||||
.UseKestrel()
|
|
||||||
.UseStartup<Startup>()
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
host.Run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"Logging": {
|
"Logging": {
|
||||||
"IncludeScopes": false,
|
"IncludeScopes": false,
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Verbose",
|
"Default": "Debug",
|
||||||
"System": "Information",
|
"System": "Information",
|
||||||
"Microsoft": "Information"
|
"Microsoft": "Information"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"name": "WebApplicationBasic",
|
"name": "WebApplicationBasic",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"aspnet-webpack": "^1.0.6",
|
||||||
"aspnet-webpack-react": "^1.0.1",
|
"aspnet-webpack-react": "^1.0.1",
|
||||||
"babel-loader": "^6.2.3",
|
"babel-loader": "^6.2.3",
|
||||||
"babel-preset-es2015": "^6.5.0",
|
"babel-preset-es2015": "^6.5.0",
|
||||||
@@ -21,7 +22,6 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"aspnet-prerendering": "^1.0.2",
|
"aspnet-prerendering": "^1.0.2",
|
||||||
"aspnet-webpack": "^1.0.2",
|
|
||||||
"babel-core": "^6.5.2",
|
"babel-core": "^6.5.2",
|
||||||
"domain-task": "^2.0.0",
|
"domain-task": "^2.0.0",
|
||||||
"react": "^15.0.1",
|
"react": "^15.0.1",
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"type": "platform"
|
"type": "platform"
|
||||||
},
|
},
|
||||||
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.ReactServices": "1.0.0-*",
|
"Microsoft.AspNetCore.ReactServices": "1.0.0-*",
|
||||||
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
||||||
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
||||||
@@ -17,46 +16,16 @@
|
|||||||
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging": "1.0.0",
|
"Microsoft.Extensions.Logging": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"tools": {
|
"tools": {
|
||||||
"Microsoft.AspNetCore.Razor.Tools": {
|
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
|
||||||
"version": "1.0.0-preview2-final",
|
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.EntityFrameworkCore.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.Extensions.SecretManager.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
|
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -64,14 +33,12 @@
|
|||||||
"netcoreapp1.0": {
|
"netcoreapp1.0": {
|
||||||
"imports": [
|
"imports": [
|
||||||
"dotnet5.6",
|
"dotnet5.6",
|
||||||
"dnxcore50",
|
|
||||||
"portable-net45+win8"
|
"portable-net45+win8"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"buildOptions": {
|
"buildOptions": {
|
||||||
"debugType": "portable",
|
|
||||||
"emitEntryPoint": true,
|
"emitEntryPoint": true,
|
||||||
"preserveCompilationContext": true
|
"preserveCompilationContext": true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,11 +1,16 @@
|
|||||||
FROM microsoft/aspnet:1.0.0-rc1-update1
|
FROM microsoft/dotnet:latest
|
||||||
|
|
||||||
RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list
|
RUN apt-get update
|
||||||
RUN apt-get -qq update && apt-get install -qqy sqlite3 libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
RUN apt-get install -y build-essential nodejs nodejs-legacy
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY project.json .
|
||||||
|
RUN ["dotnet", "restore"]
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
RUN ["dotnet", "build"]
|
||||||
RUN ["dnu", "restore"]
|
|
||||||
|
|
||||||
EXPOSE 5000/tcp
|
EXPOSE 5000/tcp
|
||||||
ENTRYPOINT ["dnx", "-p", "project.json", "web"]
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"]
|
||||||
|
|||||||
31
templates/ReactSpa/Program.cs
Normal file
31
templates/ReactSpa/Program.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
|
namespace WebApplicationBasic
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var config = new ConfigurationBuilder()
|
||||||
|
.AddCommandLine(args)
|
||||||
|
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var host = new WebHostBuilder()
|
||||||
|
.UseConfiguration(config)
|
||||||
|
.UseKestrel()
|
||||||
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
|
.UseIISIntegration()
|
||||||
|
.UseStartup<Startup>()
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
host.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,43 +1,58 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
|
||||||
using Microsoft.AspNetCore.SpaServices.Webpack;
|
using Microsoft.AspNetCore.SpaServices.Webpack;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Newtonsoft.Json.Serialization;
|
|
||||||
|
|
||||||
namespace WebApplicationBasic
|
namespace WebApplicationBasic
|
||||||
{
|
{
|
||||||
public class Startup
|
public class Startup
|
||||||
{
|
{
|
||||||
|
public Startup(IHostingEnvironment env)
|
||||||
|
{
|
||||||
|
var builder = new ConfigurationBuilder()
|
||||||
|
.SetBasePath(env.ContentRootPath)
|
||||||
|
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
||||||
|
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
|
||||||
|
.AddEnvironmentVariables();
|
||||||
|
Configuration = builder.Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IConfigurationRoot Configuration { get; }
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
services.AddMvc().AddJsonOptions(options =>
|
// Add framework services.
|
||||||
{
|
services.AddMvc();
|
||||||
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory, IHostingEnvironment env)
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
||||||
{
|
{
|
||||||
app.UseDeveloperExceptionPage();
|
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
|
||||||
|
loggerFactory.AddDebug();
|
||||||
|
|
||||||
if (env.IsDevelopment()) {
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseDeveloperExceptionPage();
|
||||||
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
|
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions {
|
||||||
HotModuleReplacement = true,
|
HotModuleReplacement = true,
|
||||||
ReactHotModuleReplacement = true
|
ReactHotModuleReplacement = true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Home/Error");
|
||||||
|
}
|
||||||
|
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
loggerFactory.AddConsole();
|
|
||||||
app.UseMvc(routes =>
|
app.UseMvc(routes =>
|
||||||
{
|
{
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
@@ -49,17 +64,5 @@ namespace WebApplicationBasic
|
|||||||
defaults: new { controller = "Home", action = "Index" });
|
defaults: new { controller = "Home", action = "Index" });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
var host = new WebHostBuilder()
|
|
||||||
.UseContentRoot(Directory.GetCurrentDirectory())
|
|
||||||
.UseIISIntegration()
|
|
||||||
.UseKestrel()
|
|
||||||
.UseStartup<Startup>()
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
host.Run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"Logging": {
|
"Logging": {
|
||||||
"IncludeScopes": false,
|
"IncludeScopes": false,
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Verbose",
|
"Default": "Debug",
|
||||||
"System": "Information",
|
"System": "Information",
|
||||||
"Microsoft": "Information"
|
"Microsoft": "Information"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "WebApplicationBasic",
|
"name": "WebApplicationBasic",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"aspnet-webpack": "^1.0.2",
|
"aspnet-webpack": "^1.0.6",
|
||||||
"aspnet-webpack-react": "^1.0.0",
|
"aspnet-webpack-react": "^1.0.0",
|
||||||
"babel-loader": "^6.2.3",
|
"babel-loader": "^6.2.3",
|
||||||
"babel-preset-es2015": "^6.5.0",
|
"babel-preset-es2015": "^6.5.0",
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"type": "platform"
|
"type": "platform"
|
||||||
},
|
},
|
||||||
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.ReactServices": "1.0.0-*",
|
"Microsoft.AspNetCore.ReactServices": "1.0.0-*",
|
||||||
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
||||||
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
||||||
@@ -17,46 +16,16 @@
|
|||||||
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging": "1.0.0",
|
"Microsoft.Extensions.Logging": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"tools": {
|
"tools": {
|
||||||
"Microsoft.AspNetCore.Razor.Tools": {
|
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
|
||||||
"version": "1.0.0-preview2-final",
|
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.EntityFrameworkCore.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.Extensions.SecretManager.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
|
"Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final"
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -64,14 +33,12 @@
|
|||||||
"netcoreapp1.0": {
|
"netcoreapp1.0": {
|
||||||
"imports": [
|
"imports": [
|
||||||
"dotnet5.6",
|
"dotnet5.6",
|
||||||
"dnxcore50",
|
|
||||||
"portable-net45+win8"
|
"portable-net45+win8"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"buildOptions": {
|
"buildOptions": {
|
||||||
"debugType": "portable",
|
|
||||||
"emitEntryPoint": true,
|
"emitEntryPoint": true,
|
||||||
"preserveCompilationContext": true
|
"preserveCompilationContext": true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
FROM microsoft/aspnet:1.0.0-rc1-update1
|
FROM microsoft/dotnet:latest
|
||||||
|
|
||||||
RUN printf "deb http://ftp.us.debian.org/debian jessie main\n" >> /etc/apt/sources.list
|
WORKDIR /app
|
||||||
RUN apt-get -qq update && apt-get install -qqy sqlite3 libsqlite3-dev && rm -rf /var/lib/apt/lists/*
|
|
||||||
|
COPY project.json .
|
||||||
|
RUN ["dotnet", "restore"]
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
WORKDIR /app
|
RUN ["dotnet", "build"]
|
||||||
RUN ["dnu", "restore"]
|
|
||||||
|
|
||||||
EXPOSE 5000/tcp
|
EXPOSE 5000/tcp
|
||||||
ENTRYPOINT ["dnx", "-p", "project.json", "web"]
|
|
||||||
|
ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"]
|
||||||
|
|||||||
31
templates/WebApplicationBasic/Program.cs
Normal file
31
templates/WebApplicationBasic/Program.cs
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.AspNetCore.Hosting;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
|
namespace WebApplicationBasic
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var config = new ConfigurationBuilder()
|
||||||
|
.AddCommandLine(args)
|
||||||
|
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var host = new WebHostBuilder()
|
||||||
|
.UseConfiguration(config)
|
||||||
|
.UseKestrel()
|
||||||
|
.UseContentRoot(Directory.GetCurrentDirectory())
|
||||||
|
.UseIISIntegration()
|
||||||
|
.UseStartup<Startup>()
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
host.Run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
@@ -13,19 +12,42 @@ namespace WebApplicationBasic
|
|||||||
{
|
{
|
||||||
public class Startup
|
public class Startup
|
||||||
{
|
{
|
||||||
|
public Startup(IHostingEnvironment env)
|
||||||
|
{
|
||||||
|
var builder = new ConfigurationBuilder()
|
||||||
|
.SetBasePath(env.ContentRootPath)
|
||||||
|
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
|
||||||
|
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
|
||||||
|
.AddEnvironmentVariables();
|
||||||
|
Configuration = builder.Build();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IConfigurationRoot Configuration { get; }
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to add services to the container.
|
// This method gets called by the runtime. Use this method to add services to the container.
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
|
// Add framework services.
|
||||||
services.AddMvc();
|
services.AddMvc();
|
||||||
}
|
}
|
||||||
|
|
||||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory, IHostingEnvironment env)
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
|
||||||
{
|
{
|
||||||
app.UseDeveloperExceptionPage();
|
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
|
||||||
|
loggerFactory.AddDebug();
|
||||||
|
|
||||||
|
if (env.IsDevelopment())
|
||||||
|
{
|
||||||
|
app.UseDeveloperExceptionPage();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
app.UseExceptionHandler("/Home/Error");
|
||||||
|
}
|
||||||
|
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
loggerFactory.AddConsole();
|
|
||||||
app.UseMvc(routes =>
|
app.UseMvc(routes =>
|
||||||
{
|
{
|
||||||
routes.MapRoute(
|
routes.MapRoute(
|
||||||
@@ -33,17 +55,5 @@ namespace WebApplicationBasic
|
|||||||
template: "{controller=Home}/{action=Index}/{id?}");
|
template: "{controller=Home}/{action=Index}/{id?}");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Main(string[] args)
|
|
||||||
{
|
|
||||||
var host = new WebHostBuilder()
|
|
||||||
.UseContentRoot(Directory.GetCurrentDirectory())
|
|
||||||
.UseIISIntegration()
|
|
||||||
.UseKestrel()
|
|
||||||
.UseStartup<Startup>()
|
|
||||||
.Build();
|
|
||||||
|
|
||||||
host.Run();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"Logging": {
|
"Logging": {
|
||||||
"IncludeScopes": false,
|
"IncludeScopes": false,
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Verbose",
|
"Default": "Debug",
|
||||||
"System": "Information",
|
"System": "Information",
|
||||||
"Microsoft": "Information"
|
"Microsoft": "Information"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"type": "platform"
|
"type": "platform"
|
||||||
},
|
},
|
||||||
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
|
|
||||||
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
|
||||||
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
"Microsoft.AspNetCore.Mvc": "1.0.0",
|
||||||
"Microsoft.AspNetCore.Razor.Tools": {
|
"Microsoft.AspNetCore.Razor.Tools": {
|
||||||
@@ -16,60 +15,28 @@
|
|||||||
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
|
||||||
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
"Microsoft.Extensions.Configuration.Json": "1.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.CommandLine": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging": "1.0.0",
|
"Microsoft.Extensions.Logging": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
"Microsoft.Extensions.Logging.Console": "1.0.0",
|
||||||
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
"Microsoft.Extensions.Logging.Debug": "1.0.0",
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"type": "build"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"tools": {
|
"tools": {
|
||||||
"Microsoft.AspNetCore.Razor.Tools": {
|
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
|
||||||
"version": "1.0.0-preview2-final",
|
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.EntityFrameworkCore.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Microsoft.Extensions.SecretManager.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": "portable-net45+win8+dnxcore50"
|
|
||||||
},
|
|
||||||
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
|
|
||||||
"version": "1.0.0-preview2-final",
|
|
||||||
"imports": [
|
|
||||||
"portable-net45+win8+dnxcore50",
|
|
||||||
"portable-net45+win8"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
"frameworks": {
|
"frameworks": {
|
||||||
"netcoreapp1.0": {
|
"netcoreapp1.0": {
|
||||||
"imports": [
|
"imports": [
|
||||||
"dotnet5.6",
|
"dotnet5.6",
|
||||||
"dnxcore50",
|
|
||||||
"portable-net45+win8"
|
"portable-net45+win8"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
"buildOptions": {
|
"buildOptions": {
|
||||||
"debugType": "portable",
|
|
||||||
"emitEntryPoint": true,
|
"emitEntryPoint": true,
|
||||||
"preserveCompilationContext": true
|
"preserveCompilationContext": true
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "generator-aspnetcore-spa",
|
"name": "generator-aspnetcore-spa",
|
||||||
"version": "0.2.2",
|
"version": "0.2.3",
|
||||||
"description": "Single-Page App templates for ASP.NET Core",
|
"description": "Single-Page App templates for ASP.NET Core",
|
||||||
"author": "Microsoft",
|
"author": "Microsoft",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user