这肯定是那些让你疯狂的原因之一。正如标题所示,我只是想做的就是使用swagger显示从xml文件中提取的注释。
我似乎已根据招摇文件采取了所有步骤,但无济于事。希望你善良的人可以指出我正确的方向。
确保文件存在:
已配置SwaggerConfig.cs
我也试过改变路径:@“bin / .... xml”
似乎没什么用。
**错误“无法找到文件”:**
有人能指出我正确的方向吗?
此致
答案 0 :(得分:4)
这些是我在.Net Core 2.2中所需的步骤:
将其放在Startup.cs中:
public void ConfigureServices(IServiceCollection services)
{
...
// Register the Swagger generator, defining 1 or more Swagger documents
services.AddSwaggerGen(c =>
{
...
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
c.IncludeXmlComments(xmlPath);
});
}
编辑.csproj文件并添加/更改以下节点:
<PropertyGroup>
...
<!--
Make sure documentation XML is also included when publishing (not only when testing)
see https://github.com/Azure/service-fabric-issues/issues/190
-->
<GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
...
<DocumentationFile>bin\$(Configuration)\YOUR_PROJECT_NAME.xml</DocumentationFile>
</PropertyGroup>
答案 1 :(得分:4)
如异常所示,应用程序在项目的基本目录中而不是在“ bin”文件夹中查找XML。
为什么该应用程序在基本目录中搜索?看这些行:
index.html
注释文件的名称是通过基本目录和xml与项目名称的组合来配置的
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".XML";//"G2F.Collective.Api.XML"
var commentsFile = Path.Combine(baseDirectory, commentsFileName);
最后,此指令告诉Swagger使用哪个文件进行注释,这是它在该目录中查找该文件的真正原因。
答案 2 :(得分:3)
好的,所以我设法通过指向根目录来实现它。
我仍然不知道为什么它无法检测bin目录中的xml文件。 同样,这可以通过在根目录中添加一个xml文件来实现。
代码更改:
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
//var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".XML";
var commentsFileName = "Comments" + ".XML";
var commentsFile = Path.Combine(baseDirectory, commentsFileName);
c.IncludeXmlComments(commentsFile);
答案 3 :(得分:2)
答案 4 :(得分:2)
使用.Net Core 2,这是我需要的内容:
var pathIncludeXmlComments = $@"{env.ContentRootPath}\Events.xml";
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "Events API", Version = "v0.1" });
c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
c.IncludeXmlComments(pathIncludeXmlComments);
});
如果遇到问题,请在第一行之后放置一个断点,检查“ pathIncludeXmlComments
”的值,并确认VS2017已在其中存储.xml文件。
请记住,在“项目属性”下的“构建”选项卡中,您需要勾选“ XML文档文件”框,并将名称设置为与上面(Events.xml
这个例子)。
答案 5 :(得分:2)
SELECT bill_month
FROM bf_monthly_bill
WHERE company_id IN ('134','391')
GROUP BY bill_month
HAVING COUNT(DISTINCT company_id) = 2
在.csproj文件的PropertyGroup标记中
答案 6 :(得分:1)
我只是想回答这个问题,以进一步解释为什么这些代码对Tez不起作用(对我也不起作用)。
有问题的代码是:
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
要使其正常工作,必须在与控制器相同的项目中的“ startup.cs”或.cs文件中编写昂首阔步的文档配置。
此外,还必须确保正在生成XML文件。因此,右键单击您的项目,转到属性,进行构建,向下滚动到“输出”部分,然后检查“ XML文档文件”选项。 (这些步骤适用于Visual Studio 2019)。
XML文件通常默认情况下命名为“您的项目名称” .xml。
$"{Assembly.GetExecutingAssembly().GetName().Name}.xml"
因此,此行代码可确保您的灵活配置中xml文件的名称为:“ your-project-name” .xml,控制器文档位于该文件中。
在我的情况下,我在类库的扩展方法中进行了灵活的配置,因此该行代码生成了xml文件名:“ class-library-project-name” .xml,而该文件应为“ controller” -resident-project-name“ .xml。
像Tez建议的那样,解决方案是手动设置XML文件名,因为您已经知道它是什么。
另一种解决方案是在startup.cs中配置swagger,通常与控制器位于同一项目中。
希望这会有所帮助。
答案 7 :(得分:0)
可能是我来晚了一点,但想分享我的修复程序,我在Notepad ++中打开了.csproj文件,并删除了所有注释(),保存了文件并再次打开了解决方案, (如果您的解决方案中有多个项目,请使用所有.csproj文件)
答案 8 :(得分:0)
我从 Microsoft 文档站点找到了以下解决方案。
在解决方案资源管理器中右键单击该项目并选择编辑
final VoidCallback? onPressed;