【发布时间】:2021-12-23 04:42:09
【问题描述】:
我正在尝试创建单个文件 asp.net core 5 web 应用程序。目标是拥有一个 .exe 文件,通过执行此 exe 文件运行 Kestrel 服务器并在浏览器中加载页面。
我在 VS 2019 中创建了一个 ASP.NET Core 5 模板应用程序。然后使用 cli 我运行以下命令:
dotnet publish -c Release -r win-x64 /p:PublishSingleFile=true \n
/p:IncludeNativeLibrariesForSelfExtract=true --self-contained true
这会生成一个 exe 文件,当我复制到其他地方时,它可以正常运行。 但是当我浏览页面时,没有加载任何静态文件:
生成单个文件 asp.net 核心应用程序的正确方法是什么,以便加载静态内容?
编辑
根据要求,将发布后的输出截图放在这里
编辑 2
要获得可重现的项目:
Visual Studio 2019 -> 新解决方案 -> ASP.NET Core Web App,配置如下
编辑 3
感谢 @JHBonarius 的回答,我更改了 Program.cs 以将 ContentRoot 设置为一个临时文件夹,其中 wwwroot 内容正在被提取。
public class Program
{
public static void Main(string[] args)
{
var path = Path.Combine(Path.GetTempPath(), ".net", typeof(Program).Assembly.GetName().Name);
var directory =
Directory
.GetDirectories(path)
.Select(path => new DirectoryInfo(path))
.OrderByDescending(di => di.LastWriteTime)
.First();
CreateHostBuilder(args)
.UseContentRoot(directory.FullName)
.Build()
.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
虽然我很欣赏这似乎是一种 hack(我找不到任何有关此路径的官方文档),但我想要一些工作代码。
通过这些更改,页面现在加载静态资源,但不是全部。
这是解决方案资源管理器中wwwroot 文件夹的内容
这是在临时路径上提取的wwwroot 文件夹的内容
可以看出js/css 文件夹以及jquery-validation 和jquery-validation-unobtrusive 文件夹完全丢失。
有什么线索吗?
我创建了一个带有最新更改的github repo。
【问题讨论】:
-
如果您发布的应用程序没有
PublishSingleFile选项,它是否有效? -
你能显示关于你的单个 .exe 文件的屏幕截图吗?我的意思是我想在你的网站上看到你的内容。
-
你也可以尝试设置
ItemGroup在部署时包含静态文件。 -
@JasonPan 查看编辑后的帖子
-
@AndrewSilver 不,在那种情况下我没有一个文件。
标签: c# asp.net-core .net-5