AppContext.BaseDirectory与Assembly.GetEntryAssembly发布应用程序后位置是否相同?

问题描述

我正在开发ASP.NET Core 3.1 Web API,并进行了swagger的设置。我已经在项目中添加了草率的文档。

  1. 右键单击API Project-> Build-> Output

enter image description here

  1. 这将在我的项目根文件夹中生成xxx.xml文件。

  2. 右键单击-> xxx.xml-> Copy To Output Directory-> Copy Always

  3. 我将xxx.xml中的swagger配置中的Startup.cs文件引用如下

var xmlCommentsFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlCommentsFullPath = Path.Combine(AppContext.BaseDirectory,xmlCommentsFile);

options.IncludeXmlComments(xmlCommentsFullPath);

我应该在这里使用AppContext.BaseDirectory还是Assembly.GetEntryAssembly().Location

在我的本地开发中运行此文件时,我可以看到它在bin\Debug\netcoreapp3.1\内部运行,但是发布文件夹结构后是否相同?那么发布和部署后会选择正确的路径吗?

解决方法

System.AppContext.BaseDirectory应该指向包含托管入口点程序集的文件夹,无论是bin\Debug\netcoreapp3.1\bin\x64\release\netcoreapp3.1\还是其他位置。

您可以for example使用此属性来获取单文件可执行文件的实际位置,该文​​件将从一个文件夹中提取并在运行前复制到另一个临时文件夹中。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...