我应该如何在ASP.NET 5中调试TypeScript文件? 假设解决方案布局如下图所示。注意.ts脚本在wwwroot文件夹之外,编译的.js文件通过Grunt任务到达那里。 该任务还会创建引用原始.ts文件的.map文件。
但请注意,引用不在wwwroot(../Scripts/app.ts)之内。这显然不适用于浏览器。
有什么想法吗?
答案 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中获得断点。