在wwwroot之外调试TypeScript文件

时间:2015-04-10 09:24:39

标签: typescript asp.net-core

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

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

有什么想法吗?

enter image description here

5 个答案:

答案 0 :(得分: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"),
        });
    }
}

我的所有TypeScript文件都在 / App

答案 1 :(得分:3)

使用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"),
        });
    }
}

答案 2 :(得分: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]属性才能使这些路径生效。)

答案 3 :(得分: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部分中路径下的所有文件。

答案 4 :(得分:0)

我正在使用Visual Studio 2015 RC并默认调试wwwroot文件夹以外的脚本如果我将Internet Explorer设置为visual studio中的调试浏览器。

这也让您有机会直接在visual studio IDE中获得断点。