2015-04-10 3 views
8

Как отлаживать файлы TypeScript в ASP.NET 5? Предположим, что решение расположено на следующем рисунке. Заметьте .ts Сценарии находятся вне папки wwwroot, и скомпилированный файл .js попадает туда через задачу Grunt. Задача также создает файл .map, который ссылается на исходные файлы .ts.Отладка файлов TypeScript вне wwwroot

Обратите внимание, что эта ссылка выходит за пределы wwwroot (../Scripts/app.ts). Это явно не работает в браузере.

Любая идея?

enter image description here

+1

Почему вы не копировать .TS в Wwwroot? –

+1

VS будет жаловаться на дублирующие идентификаторы, поскольку одни и те же классы будут определены в 2-х местах. – Mikeon

+2

также я не думаю, что положить ненужные файлы в wwwroot - это то, как мы должны работать. – Mikeon

ответ

2

я добавил следующие действия для одного из моих контроллеров, где appEnvironment является IApplicationEnvironment закачиваемой в контроллер:

#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 

Удобно, новые веб-серверы обнажать вне ../ (Я предполагаю в целях безопасности), поэтому вам даже не нужно беспокоиться о том, чтобы их на Маршруте. (Обратите внимание, что вам не нужно иметь атрибут [RoutePrefix] на самом контроллере, чтобы эти пути работали.)

+1

почти работает. Пришлось заменить: var path = System.IO.Directory.GetCurrentDirectory() + "/ Scripts /" + pathInfo; с: var path = appEnvironment.ApplicationBasePath + "/ Scripts /" + pathInfo; и добавить конструктор: IApplicationEnvironment appEnvironment; \t \t общественного HomeController (IApplicationEnvironment appEnvironment) \t \t { \t \t \t this.appEnvironment = appEnvironment; \t \t} – Mikeon

+0

Это лучший способ сделать это; Я обновлю ответ! –

0

Я использую Visual Studio 2015 RC и отладка для скриптов вне папки wwwroot работает по умолчанию, если я устанавливаю Internet Explorer как браузер отладки в визуальной студии.

Это также дает возможность иметь контрольные точки непосредственно в визуальной студии IDE.

1

Я столкнулся с одной и той же проблемой. Прямо сейчас, с Visual Studio 2015 Update 1, и мне удалось преодолеть эту проблему путем размещения tsconfig.json в корне проекта со следующим содержанием (обратите внимание на исключения):

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

С этим, вы можете иметь ваш бегун задачи для копирования * .ts файлов в wwwroot и VS не будет жаловаться на дубликаты. Фактически, он полностью игнорирует все файлы под путями в разделе exclude.

12

Я до сих пор точно так же, проблема в Visual Studio 2015 Update 1. Я решил его, используя следующий фрагмент кода в 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"), 
     }); 
    } 
} 

Все мои Машинопись-файлы находятся в /App

+0

Я нахожу этот ответ самым чистым решением в рамках разработки ASP.NET Core MVC и лучше всего соответствует лучшим требованиям. –

+1

Это не скомпилируется после выпуска ASP.Net Core 1.0, я опубликовал обновленный код для этой отличной идеи ниже: http://stackoverflow.com/a/40328737/1671558 –

2

обновление с ASP.Net ядро ​​выпуска для ответа хороших Стеф (то не будет компилировать сейчас):

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"), 
     }); 
    } 
} 
Смежные вопросы