在wwwroot之外调试TypeScript文件

Mik*_*eon 11 typescript asp.net-core

我应该如何在ASP.NET 5中调试TypeScript文件?假设解决方案布局如下图所示.注意.ts脚本在wwwroot文件夹之外,编译的.js文件通过Grunt任务到达那里.该任务还会创建引用原始.ts文件的.map文件.

但请注意,引用在wwwroot(../Scripts/app.ts)之外.这显然不适用于浏览器.

任何的想法?

在此输入图像描述

ste*_*tef 13

我仍然在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"),
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

我的所有TypeScript文件都在/ App下

  • 在ASP.Net Core 1.0发行后,现在将无法编译此代码,下面我针对该出色的想法发布了更新的代码:http://stackoverflow.com/a/40328737/1671558 (2认同)

Ily*_*dik 6

ASP.Net Core 版本的更新以获得一个好的 stef 答案(现在无法编译):

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"),
        });
    }
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*rey 2

我将以下操作添加到我的控制器之一,其中appEnvironmentIApplicationEnvironment注入到您的控制器中:

#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
Run Code Online (Sandbox Code Playgroud)

方便的是,新的 Web 服务器删除了 ../ (我假设是出于安全目的),因此您甚至不必担心它们出现在路由中。[RoutePrefix](请注意,控制器本身不需要具有属性才能使这些路径发挥作用。)