Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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/1/angular/29.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
C# ASP.NET Core 404,用于带有6个捆绑文件的项目模板(错误的dist输出目录)_C#_Angular_Asp.net Core - Fatal编程技术网

C# ASP.NET Core 404,用于带有6个捆绑文件的项目模板(错误的dist输出目录)

C# ASP.NET Core 404,用于带有6个捆绑文件的项目模板(错误的dist输出目录),c#,angular,asp.net-core,C#,Angular,Asp.net Core,我已经用Angular项目模板创建了一个ASP.NET核心应用程序 生成输出 在IIS上部署时,基本href为 生成的dist/index.html中脚本的路径为: <script type="text/javascript" src="runtime.js"></script> <script type="text/javascript" src="polyfills.js">&

我已经用Angular项目模板创建了一个ASP.NET核心应用程序

生成输出 在IIS上部署时,基本href为

生成的dist/index.html中脚本的路径为:

<script type="text/javascript" src="runtime.js"></script>
<script type="text/javascript" src="polyfills.js"></script>
<script type="text/javascript" src="vendor.js"></script>
<script type="text/javascript" src="main.js"></script>
为什么基本路径设置不正确? 该项目在IIS上运行,我们可以看到index.html的后台初始化消息正确显示,但是如图所示,所有资源都加载在服务器的根“/”上,因此它们得到404

如果我尝试加载http://{SERVERIP}/{PROJECTNAMEHERE}/runtime.js,我发现它可以工作,所以我想这可能只是base href的问题


如何从ASP.NET Core动态设置该基本href?

Angular 6引入了每个工作区有多个项目的功能(请参见),每个项目都被编译到dist/内的子文件夹中,但是ASP.NET Core Angular模板与Angular 5一起工作,Angular 5在dist/内立即编译


所以有一种方法可以解决这个问题:打开angular.json并将“outputPath”值从
dist/
更改为简单的
dist

在接受了Setrákus关于将这一行包含在Startup.cs文件中的建议后,我继续遇到这个问题

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseSpaStaticFiles();
}
因此,经过一些尝试和错误,我发现以下方法对我有效:

  • 删除ClientApp中的dist文件夹
  • 运行一个指定网站基本href的角度构建命令,例如,如果我的目标是,那么我将运行

    'ng build --base-href /ABC/'
    
这处理了角度应用程序,但在.NET核心端也需要进行更改。

查看一些类似的问题,似乎是调用AngularCLI中间件UseAgularCliServer()导致了问题

要删除UseAngularCliServer()调用,如果只是测试,您只需按如下所示注释掉它,或者如果这是为了一个合适的托管环境,请将环境变量更改为“Production”以跳过该if块

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    if (env.IsDevelopment())
    {
       //spa.UseAngularCliServer(npmScript: "start");
    }
}

无需执行任何操作,只需在内部替换base href即可

/src/index.html

之前

<base href="/">
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
   ...
   <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
   ...
</Target>

之后

<base href="/YOURSITENAMEHERE/">
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
   ...
   <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod --base-href /site name/>
   ...
</Target>


然后发布asp.net核心站点。

我想进一步扩展@tahasultantemuri的答案,我认为这是正确的。唯一的问题是,如果编辑的index.html文件与站点的生产位置相匹配,则在发布后,必须将其更改回原来的位置,否则在本地主机上运行将不再有效。为了避免这种情况,请按如下方式修改.csproj文件

之前

<base href="/">
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
   ...
   <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
   ...
</Target>

...
...
之后

<base href="/YOURSITENAMEHERE/">
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
   ...
   <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod --base-href /site name/>
   ...
</Target>

...

你解决这个问题了吗?我也有同样的问题。该项目在IIS express中运行良好,因为它直接在localhost:port中运行,但在发布时无法加载js文件。默认情况下,VS在wwwroot外部的根文件夹上发布ClientApp。我还尝试将ClientApp文件夹移动到wwwroot,尝试设置base href,但没有任何效果。有人有解决方案吗?我遇到了同样的问题。如果我将文件移动到wwwroot文件夹中,效果会很好。所以,我想知道我们如何才能让它在ClientApp/dist中工作。以前在该文件夹中工作过,但突然不起作用。我发现了。在我添加了这行app.UseSpaStaticFiles()之后,它就工作了;在Startup.cs中的Configure方法中