AppContext.BaseDirectory vs Assembly.GetEntryAssembly()。发布应用程序后位置是否相同?

AppContext.BaseDirectory vs Assembly.GetEntryAssembly().Location will be same after publishing the application?

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

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

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

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

  3. 我在Startup.cs中的swagger配置中参考xxx.xml文件如下

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 使用此 属性 获取 single-file 可执行文件的实际位置,该可执行文件从一个文件夹中提取并复制到另一个临时文件夹中,然后 运行.