Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在wwwroot外部调试TypeScript文件_Typescript_Asp.net Core - Fatal编程技术网

在wwwroot外部调试TypeScript文件

在wwwroot外部调试TypeScript文件,typescript,asp.net-core,Typescript,Asp.net Core,如何调试ASP.NET 5中的TypeScript文件? 假设解决方案布局如下图所示。注意.ts脚本位于wwwroot文件夹之外,编译的.js文件通过Grunt任务到达该文件夹。 该任务还创建引用原始.ts文件的.map文件 但是请注意,引用超出了wwwroot(../Scripts/app.ts)。这显然在浏览器中不起作用 有什么想法吗 我向我的一个控制器添加了以下操作,其中AppenEnvironment是注入控制器的IApplicationEnvironment: #if DEBUG [

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

但是请注意,引用超出了wwwroot(../Scripts/app.ts)。这显然在浏览器中不起作用

有什么想法吗


我向我的一个控制器添加了以下操作,其中
AppenEnvironment
是注入控制器的
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

方便的是,新的web服务器去掉了../(我假设是出于安全目的),所以您甚至不必担心它们会出现在路由中。(请注意,要使这些路径正常工作,控制器本身不需要有
[RoutePrefix]
属性。)

我使用的是Visual studio 2015 RC,如果在Visual studio中将internet explorer设置为调试浏览器,则默认情况下,对wwwroot文件夹之外的脚本进行调试


这也使您有机会直接在visual studio IDE中设置断点。

我也遇到了同样的问题。现在,使用Visual Studio 2015 Update 1,我通过将tsconfig.json与以下内容放在项目根目录中(请注意排除项),成功地解决了这个问题:


这样,您可以让任务运行程序将*.ts文件复制到wwwroot,而VS不会抱怨重复。事实上,它将完全忽略排除部分中路径下的所有文件。

在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

的ASP.Net核心版本更新下,以获得一个好的stef答案(现在不会编译):


为什么不在wwwroot中复制你的.ts?VS会抱怨标识符重复,因为相同的类将在两个位置定义。此外,我不认为在wwwroot中放置不必要的文件是我们应该采用的工作方式。这只是为了调试,我将在发布时仅打开一个文件来删除投诉:(我已经用一个中间件创建了一个变通解决方案,该中间件为wwwroot外部的.ts文件提供服务。不过,我想知道ASP.NET团队认为应该如何正确地完成这项工作。几乎可以正常工作。必须替换:var path=System.IO.Directory.GetCurrentDirectory()+“/Scripts/”+pathInfo;with:var path=appEnvironment.ApplicationBasePath+“/Scripts/”+pathInfo;并添加构造函数:iaapplicationenvironment appEnvironment;public HomeController(iaapplicationenvironment appEnvironment){this.appEnvironment=appEnvironment;}这是一种更好的方法;我将更新答案!在ASP.NET核心中不能作为文件(路径…)使用需要一个虚拟路径,并且不能超出wwwroot。请参阅@Ilya对ASP.NET Core的回答。我发现这个答案是ASP.NET Core MVC开发中最干净的解决方案,并且最符合所需的指导原则。在ASP.NET Core 1.0发布后,现在不会编译这个问题。我已经在下面发布了一个更新的代码,用于这个极好的想法:看起来如果无法正常工作,则
RequestPath
的名称与物理路径不同,因为Visual Studio不知道此路径映射。
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"),
        });
    }
}
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"),
        });
    }
}