XML 文档文件未包含在发布文件夹中

XML Documentation file is not included in publish folder

我在 ASP.NET 核心 MVC 应用程序中选择了“Xml documentation file”,它显示“bin\Debug\net452\MyProject.xml”作为输出文件夹。问题是发布文件夹中不存在该文件。我需要一些额外的东西来包括它吗?使用 .NET Core 1.0-RC4 和 VS.NET 2017 RC4(新的 csproject 格式)。

如果您正在使用 project.json,那么您可以控制发布过程包含和排除的文件和文件夹:

  "publishOptions": {
    "include": [
      "wwwroot",
      "appsettings.json",
      "appsettings.*.json",
      "web.config"
    ],
    "exclude": [
      "wwwroot/less"
    ]
  }

对于基于 .csproj 的项目 here is a good resource 用于复制 XML 中的旧 project.json 设置,例如:

<ItemGroup>
  <Compile Include="..\Shared\*.cs" Exclude="..\Shared\Not\*.cs" />
  <EmbeddedResource Include="..\Shared\*.resx" />
  <Content Include="Views\**\*" PackagePath="%(Identity)" />
  <None Include="some/path/in/project.txt" Pack="true" PackagePath="in/package.txt" />

  <None Include="notes.txt" CopyToOutputDirectory="Always" />
  <!-- CopyToOutputDirectory = { Always, PreserveNewest, Never } -->

  <Content Include="files\**\*" CopyToPublishDirectory="PreserveNewest" />
  <None Include="publishnotes.txt" CopyToPublishDirectory="Always" />
  <!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } -->
</ItemGroup>

project.json 文件应该在 "buildOptions" 下有 "xmlDoc": true:

{
    "buildOptions": {
        "xmlDoc": true
    }
}

如果您的代码中有这样的文档:

/// <summary>
/// Documentation for FooClass
/// </summary>
public static class FooClass
{
    // ...
}

那么您的输出中应该有一个 xml 文件,如下所示:

<doc>
    <assembly>
        <name>Foo.Bar</name>
    </assembly>
    <members>
        <member name="T:Foo.Bar.FooClass">
            <summary>
            Documentation for FooClass
            </summary>
        </member>
    </members>
</doc>

显然这没有在 dotnet publish 中实现,但会在不久的将来实现:https://github.com/dotnet/sdk/issues/795

1.1.2

上测试

ResolvedFileToPublish 是发布用来知道将哪些文件放入发布文件夹的项目。 Include 是文件的来源,RelativePath 是发布文件夹中应该放置文件的位置。 ComputeFilesToPublish 顾名思义——它是收集所有要发布的文件的Target。

<Target Name="CopyDocumentationFile"
AfterTargets="ComputeFilesToPublish">
    <ItemGroup>
    <ResolvedFileToPublish Include="@(FinalDocFile)"
                     RelativePath="@(FinalDocFile->'%(Filename)%(Extension)')" />
    </ItemGroup>
</Target>

只需将此目标添加到您的 .csproj 并确保 GenerateDocumentationFile 设置为 true

<GenerateDocumentationFile>true</GenerateDocumentationFile>

https://github.com/dotnet/sdk/issues/795#issuecomment-289782712

在 Asp.net Core 中,如果您在设置 DocumentationFile 时遇到问题,我们可以通过在 .csproj 中设置 GenerateDocumentationFile 属性 来实现:

<PropertyGroup>
  <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>