You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Azure部署的ASP.NET Core应用中ClickOnce的setup.exe访问404求助

解决ASP.NET Core部署到Azure后ClickOnce setup.exe 404错误的方案

这个问题我之前帮不少开发者处理过,核心原因是ASP.NET Core默认不会处理.exe这类被标记为潜在风险的静态文件,再加上Azure Web Apps的默认配置也会限制这类文件的访问。给你几个一步步的解决办法:

1. 配置静态文件中间件允许.exe文件

ASP.NET Core的静态文件中间件默认不识别.exe的MIME类型,你需要手动添加映射。

如果是.NET 6+(使用Top-level statements),修改Program.cs

using Microsoft.AspNetCore.StaticFiles;

var builder = WebApplication.CreateBuilder(args);

// 其他服务配置...

var app = builder.Build();

// 先配置静态文件中间件,再配置路由
var provider = new FileExtensionContentTypeProvider();
// 添加.exe的MIME类型映射
provider.Mappings[".exe"] = "application/octet-stream";

app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});

// 其他中间件(路由、授权等)...

app.Run();

如果是老版本(.NET 5及以下,使用Startup.cs),修改Configure方法:

using Microsoft.AspNetCore.StaticFiles;

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...其他配置

    var provider = new FileExtensionContentTypeProvider();
    provider.Mappings[".exe"] = "application/octet-stream";

    app.UseStaticFiles(new StaticFileOptions
    {
        ContentTypeProvider = provider
    });

    // ...路由、端点配置
}

2. 添加Azure Web Apps的web.config MIME映射

如果你的应用部署到Azure的IIS兼容环境,还需要在wwwroot目录下添加(或修改)web.config文件,确保IIS能识别.exe文件:

<configuration>
  <system.webServer>
    <staticContent>
      <!-- 为.exe添加MIME类型 -->
      <mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
    </staticContent>
  </system.webServer>
</configuration>

3. 确认setup.exe被正确部署

检查你的项目配置,确保setup.exe被设置为复制到输出目录
在项目的.csproj文件中添加或修改以下内容:

<ItemGroup>
  <None Update="tools\setup.exe">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
  <!-- 如果还有其他ClickOnce相关文件,也可以一并添加 -->
  <None Update="tools\MyApp.application">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

4. 检查中间件顺序

确保UseStaticFiles中间件在路由中间件(UseRoutingUseEndpoints)之前调用,否则ASP.NET Core会优先尝试将setup.exe解析为路由,导致404。

完成以上步骤后,重新发布应用到Azure,应该就能正常访问setup.exe了。

内容的提问来源于stack exchange,提问作者Jonathan Allen

火山引擎 最新活动