Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
找不到XML注释文件-Swagger_Xml_Visual Studio_Swagger - Fatal编程技术网

找不到XML注释文件-Swagger

找不到XML注释文件-Swagger,xml,visual-studio,swagger,Xml,Visual Studio,Swagger,这当然是让你发疯的原因之一。正如标题所示,我只是想用swagger显示从xml文件中提取的注释 我似乎已经采取了所有步骤,根据招摇过市的文件,但没有任何效果。希望你们这些善良的人能给我指出正确的方向 采取的步骤: 确保文件存在: var baseDirectory = AppDomain.CurrentDomain.BaseDirectory; //var commentsFileName = Assembly.GetExecutingAssem

这当然是让你发疯的原因之一。正如标题所示,我只是想用swagger显示从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);

已配置
SwaggerConfig.cs

我也尝试过更改路径:@“bin/…xml”

似乎什么都不管用

**错误“找不到文件”:**

谁能给我指一下正确的方向吗


关于,

好的,所以我通过指向根目录设法让它工作

我仍然不知道为什么它无法检测到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);

确保XML Generate配置中的项目属性与swagger配置文件的XML名称匹配。 遵循印刷品,以便于理解


使用.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);
});
var-pathIncludeXmlComments=$@“{env.ContentRootPath}\Events.xml”;
services.AddSwaggerGen(c=>
{
c、 SwaggerDoc(“v1”,新信息{Title=“Events API”,Version=“v0.1”});
c、 操作过滤器();
c、 includexmlcoments(路径includexmlcoments);
});
如果遇到问题,请在第一行之后放置断点,检查“
pathIncludeXmlComments
”的值,并确认VS2017在那里存储了一个.xml文件


请记住,在“项目属性”下的“构建”选项卡中,您需要勾选“XML文档文件”框,并将名称设置为与上面的文件名相同的名称(
Events.XML
,在本例中)。

这些是我在.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)\$(AssemblyName).xml</DocumentationFile>
  </PropertyGroup>

...
真的
...
bin\$(配置)\$(程序集名称).xml
在.net core 3.0中

true

在.csproj文件的PropertyGroup标记中,我只想回答这个问题,进一步解释为什么这些代码对Tez不起作用(对我也不起作用)

有关守则是:

var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
要使其工作,您的swagger文档配置必须写入“startup.cs”或与控制器位于同一项目中的.cs文件中

此外,必须确保生成XML文件。因此,右键单击项目,转到属性,转到构建,向下滚动到“输出”部分,并选中“XML文档文件”选项。(这些步骤适用于Visual Studio 2019)

默认情况下,XML文件通常命名为“您的项目名称”.XML

$"{Assembly.GetExecutingAssembly().GetName().Name}.xml"
因此,这行代码确保您的swagger配置中xml文件的名称为:“your project name”.xml,控制器文档所在的位置

在我的例子中,我在类库中的一个扩展方法中使用了我的招摇过市配置,因此代码行生成了xml文件名:“类库项目名称”.xml,而它本应该是“控制器常驻项目名称”.xml

正如Tez所建议的,解决方案是手动设置XML文件名,因为您已经知道它是什么

另一个解决方案是在startup.cs中配置swagger,它通常与控制器位于同一个项目中


希望这有帮助。

如异常所示,应用程序在项目的基本目录中查找XML,而不是在“bin”文件夹中

为什么应用程序在基本目录中搜索?请看以下几行:

var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".XML";//"G2F.Collective.Api.XML"
var commentsFile = Path.Combine(baseDirectory, commentsFileName);
注释文件的名称配置为基本目录和带有项目名称的xml的组合

c.IncludeXmlComments(commentsFile);
最后,该指令告诉Swagger使用哪个文件来获取注释,这是它在该目录中查找该文件的真正原因

因此,最后一条指令中指示的内容必须与项目配置的Build选项卡中配置的内容一致。

可能我有点晚了,但想分享我的修复,我在记事本++中打开了.csproj文件并删除了所有注释(),保存了文件并再次打开了解决方案
(如果您的解决方案有多个项目,请处理所有.csproj文件)

我在Microsoft文档网站上找到了以下解决方案。 在解决方案资源管理器中右键单击该项目,然后选择Edit.csproj。 手动将高亮显示的行添加到.csproj文件:

<PropertyGroup>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>

真的
美元(诺瓦恩);1591

没有该文件它还能工作吗?尝试更改名称如何再次删除文件-如果它仅用于测试目的?使用.Net 3.1和Swashbuckle 5.6.2…我只需要更改属性组