无法找到XML评论文件 - Swagger

时间:2016-06-22 12:40:44

标签: xml visual-studio swagger

这肯定是那些让你疯狂的原因之一。正如标题所示,我只是想做的就是使用swagger显示从xml文件中提取的注释。

我似乎已根据招摇文件采取了所有步骤,但无济于事。希望你善良的人可以指出我正确的方向。

采取的步骤: enter image description here

确保文件存在:

enter image description here

已配置SwaggerConfig.cs

enter image description here

我也试过改变路径:@“bin / .... xml”

似乎没什么用。

**错误“无法找到文件”:**

enter image description here

有人能指出我正确的方向吗?

此致

9 个答案:

答案 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使用哪个文件进行注释,这是它在该目录中查找该文件的真正原因。

因此,上一条指令中指示的内容必须根据项目配置的“构建”选项卡中配置的内容。 swagger_net_core

答案 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)

确保XML Generate配置中的项目属性与swagger配置文件的XML名称匹配。 关注打印以便于理解

Project Properties

swagger configuration

答案 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)

.NET Core 3.0中的

 

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 文档站点找到了以下解决方案。 在解决方案资源管理器中右键单击该项目并选择编辑 .csproj。 手动将突出显示的行添加到 .csproj 文件中:

final VoidCallback? onPressed;