2015-04-10 26 views
8

Come si esegue il debug dei file TypeScript in ASP.NET 5? Supponi il layout della soluzione come nella figura seguente. Nota. Gli script sono al di fuori della cartella wwwroot e il file .js compilato sta arrivando tramite l'operazione Grunt. L'attività crea anche un file .map che fa riferimento ai file .ts originali.Esecuzione del debug dei file TypeScript all'esterno di wwwroot

Si noti tuttavia che il riferimento non rientra in wwwroot (../Scripts/app.ts). Questo ovviamente non funziona in un browser.

Qualche idea?

enter image description here

+1

Perché non copiare i ts in wwwroot? –

+1

VS si lamenterà degli identificatori duplicati in quanto le stesse classi saranno definite in 2 punti. – Mikeon

+2

Inoltre, non penso che mettere file inutili in wwwroot sia il modo in cui dovremmo lavorare. – Mikeon

risposta

2

ho aggiunto le seguenti azioni a uno dei miei regolatori, in cui è un appEnvironmentIApplicationEnvironment iniettato nel vostro controller:

#if DEBUG 

[ExcludeFromCodeCoverage] 
[Route("Scripts/{*pathInfo}", Order = 500)] 
public IActionResult TestTypescript(string pathInfo, System.Threading.CancellationToken cancellationToken) 
{ 
    var path = appEnvironment.ApplicationBasePath + "/Scripts/" + pathInfo; 
    if (System.IO.File.Exists(path) && pathInfo.EndsWith(".ts")) 
    { 
     return File(path, "application/javascript"); 
    } 
    else 
    { 
     return HttpNotFound(); 
    } 
} 

#endif 

conveniente, i nuovi server web striscia la ../ (Sto assumendo per scopi di sicurezza), quindi non devi nemmeno preoccuparti di averli nella Route. (Si noti che non è necessario un attributo [RoutePrefix] sul controller stesso per questi percorsi.)

+1

funziona quasi. Doveva sostituire: var path = System.IO.Directory.GetCurrentDirectory() + "/ Scripts /" + pathInfo; con: var path = appEnvironment.ApplicationBasePath + "/ Scripts /" + pathInfo; e aggiungere un costruttore: App IApplicationEnvironment; \t \t HomeController pubblico (IApplicationEnvironment appEnvironment) \t \t { \t \t \t this.appEnvironment = appEnvironment; \t \t} – Mikeon

+0

Questo è un modo migliore di farlo; Aggiornerò la risposta! –

0

Utilizzo Visual Studio 2015 RC e il debug per gli script al di fuori della cartella wwwroot funziona di default se imposto internet explorer come il browser di debug in Visual Studio.

Questo ti dà anche la possibilità di avere punti di interruzione direttamente nell'IDE studio visivo.

1

Mi sono imbattuto nello stesso problema. In questo momento, con Visual Studio 2015 Update 1, e sono riuscito a superare questo problema mettendo il tsconfig.json alla radice del progetto con il seguente contenuto (si noti la esclude):

{ 
    "compilerOptions": { 
    "module": "amd", 
    "noImplicitAny": false, 
    "sourceMap": false, 
    "target": "es5" 
    }, 
    "exclude": [ 
    "wwwroot", 
    "bower_components", 
    "node_modules" 
    ] 
} 

Con questo, si può avere il tuo task runner per copiare i file * .ts sul wwwroot e VS non si lamenterà dei duplicati. Infatti, ignorerà completamente tutti i file sotto i percorsi nella sezione di esclusione.

12

ho ancora esattamente lo stesso problema in Visual Studio 2015 Update 1. Ho risolto utilizzando il seguente frammento di codice in Startup.cs:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationEnvironment appEnv) 
{ 
    app.UseStaticFiles(); 
    if (env.IsDevelopment()) 
    { 
     app.UseFileServer(new FileServerOptions() 
     { 
      FileProvider = new PhysicalFileProvider(System.IO.Path.Combine(appEnv.ApplicationBasePath, "App")), 
      RequestPath = new PathString("/App"), 
     }); 
    } 
} 

Tutto il mio dattiloscritto-Files sono sotto /App

+0

Trovo questa risposta la soluzione più pulita sotto lo sviluppo di ASP.NET Core MVC e che rispetta al meglio le linee guida richieste. –

+1

Questo non verrà compilato ora dopo il rilascio di ASP.Net Core 1.0, ho pubblicato un codice aggiornato per questa eccellente idea qui sotto: http://stackoverflow.com/a/40328737/1671558 –

2

un aggiornamento con il rilascio ASP.Net Nucleo per la risposta di un buon stef (che non verrà compilato ora):

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    if (env.IsDevelopment()) 
    { 
     app.UseFileServer(new FileServerOptions() 
     { 
      FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "Scripts")), 
      RequestPath = new PathString("/app"), 
     }); 
    } 
} 
Problemi correlati