问题描述
我正在开发ASP.NET Core 3.1 Web API
,并进行了swagger
的设置。我已经在项目中添加了草率的文档。
- 右键单击
API Project
->Build
->Output
-
这将在我的项目根文件夹中生成
xxx.xml
文件。 -
右键单击->
xxx.xml
->Copy To Output Directory
->Copy Always
-
我将
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使用此属性来获取单文件可执行文件的实际位置,该文件将从一个文件夹中提取并在运行前复制到另一个临时文件夹中。