如何将 XML 文件从 NuGet 包发布到 ASP.NET Core 2.1 应用程序
How to publish XML files from a NuGet package to an ASP.NET Core 2.1 application
我有一个 ASP.NET Core 2.1 应用程序(例如,MyWebApiApp
),它引用了一个 NuGet 包(例如,MyPackage
),其中包含 Web [=42] 中使用的模型=].这些模型使用 XML 注释记录,生成的 XML 文件与 NuGet 包一起发布(在 lib\netstandard2.0\MyPackage.xml
中)。
我想在 Swagger 中使用 XML 文档,因此我将以下内容添加到 Startup.cs 中的 SwaggerGenOptions
:
c.IncludeXmlComments(Path.ChangeExtension(typeof(MyPackage.MyModel).Assembly.Location, ".xml"));
到目前为止,还不错。当我 运行 来自 Visual Studio 2017 的应用程序时,它成功地在 NuGet 包缓存中找到 XML 文档文件并生成 Swagger 文档。
现在我想发布网站。当我发布网站时:
- 应用程序 (
MyWebApiApp.xml
) 的 XML 文档文件已复制到发布文件夹(我已将 <GenerateDocumentationFile>true</GenerateDocumentationFile>
包含在 MyWebApiApp.csproj
中)。
- 但是我的 NuGet 包 (
MyPackage.xml
) 中的 XML 文档文件没有被复制。
我尝试将 this blog post 的咒语添加到 MyWebApiApp.csproj
,但没有成功。
我找到了解决方案 here。
需要将以下内容添加到 pubxml 文件中:
<Target Name="_ResolvePublishNuGetPackagePdbsAndXml"
AfterTargets="RunResolvePublishAssemblies">
<ItemGroup>
<ResolvedFileToPublish
Include="@(ResolvedAssembliesToPublish->'%(RootDir)%(Directory)%(Filename).pdb')"
RelativePath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.pdb'))"
DestinationSubPath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.pdb'))"
Condition="'%(ResolvedAssembliesToPublish.PackageName)' != ''
and Exists('%(RootDir)%(Directory)%(Filename).pdb')" />
<ResolvedFileToPublish
Include="@(ResolvedAssembliesToPublish->'%(RootDir)%(Directory)%(Filename).xml')"
RelativePath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.xml'))"
DestinationSubPath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.xml'))"
Condition="'%(ResolvedAssembliesToPublish.PackageName)' != ''
and Exists('%(RootDir)%(Directory)%(Filename).xml')" />
</ItemGroup>
</Target>
我有一个 ASP.NET Core 2.1 应用程序(例如,MyWebApiApp
),它引用了一个 NuGet 包(例如,MyPackage
),其中包含 Web [=42] 中使用的模型=].这些模型使用 XML 注释记录,生成的 XML 文件与 NuGet 包一起发布(在 lib\netstandard2.0\MyPackage.xml
中)。
我想在 Swagger 中使用 XML 文档,因此我将以下内容添加到 Startup.cs 中的 SwaggerGenOptions
:
c.IncludeXmlComments(Path.ChangeExtension(typeof(MyPackage.MyModel).Assembly.Location, ".xml"));
到目前为止,还不错。当我 运行 来自 Visual Studio 2017 的应用程序时,它成功地在 NuGet 包缓存中找到 XML 文档文件并生成 Swagger 文档。
现在我想发布网站。当我发布网站时:
- 应用程序 (
MyWebApiApp.xml
) 的 XML 文档文件已复制到发布文件夹(我已将<GenerateDocumentationFile>true</GenerateDocumentationFile>
包含在MyWebApiApp.csproj
中)。 - 但是我的 NuGet 包 (
MyPackage.xml
) 中的 XML 文档文件没有被复制。
我尝试将 this blog post 的咒语添加到 MyWebApiApp.csproj
,但没有成功。
我找到了解决方案 here。
需要将以下内容添加到 pubxml 文件中:
<Target Name="_ResolvePublishNuGetPackagePdbsAndXml"
AfterTargets="RunResolvePublishAssemblies">
<ItemGroup>
<ResolvedFileToPublish
Include="@(ResolvedAssembliesToPublish->'%(RootDir)%(Directory)%(Filename).pdb')"
RelativePath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.pdb'))"
DestinationSubPath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.pdb'))"
Condition="'%(ResolvedAssembliesToPublish.PackageName)' != ''
and Exists('%(RootDir)%(Directory)%(Filename).pdb')" />
<ResolvedFileToPublish
Include="@(ResolvedAssembliesToPublish->'%(RootDir)%(Directory)%(Filename).xml')"
RelativePath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.xml'))"
DestinationSubPath="$([System.IO.Path]::ChangeExtension(%(ResolvedAssembliesToPublish.DestinationSubPath), '.xml'))"
Condition="'%(ResolvedAssembliesToPublish.PackageName)' != ''
and Exists('%(RootDir)%(Directory)%(Filename).xml')" />
</ItemGroup>
</Target>