Net webapi 发布-xml 文件不能复制

我有 MVC 4.0 WebApi 项目与自动生成的帮助 基于这个

我的模型类将它存储在解决方案中的另一个项目中。为每个项目启用 XML 文件的生成(项目属性-> 构建-> 输出-> XML 文档文件-启用)。

在本地调试中,所有的 ok-xml 文件都被复制到项目目录中,我看到了来自其他项目的字段/类的注释。

但是当我使用发布配置文件(到文件夹)时,xml 文件不会复制到输出文件夹。只复制来自主 WebApi 项目的一个 xml 文件。所以我没有看到其他项目对类的评论。

42315 次浏览

一种方法是将 XML 文件添加到项目内的“ App _ Data”文件夹中,然后在可视化工作室中,选择一个文件到其属性“ 复制到输出目录”到“ 一向如此”。enter image description here

你可以用两种不同的方法来做:

1)转到你的项目属性—— > 选择构建选项—— > 检查“ XML 文档文件”—— > 添加路径“ App _ data XMLDocument.XML”—— > 保存设置, 构建您的项目—— > 包含您的 XMLDocument.xml 文件—— > select property —— > Copy to output 目录—— > select“ Copy always”

2)转到你的项目属性—— > 选择“ Package/Publish Web”选项—— > 要显示的项目—— > 从下拉菜单中选择“ all files in this project”

我也遇到过类似的问题,对我来说,答案有点像“哦!”时刻。

在项目设置中,我只在 Debug 配置下启用了 XML 文档文件,而没有在 Release 下启用。我是用 Release 部署的,所以 XML 文档实际上并没有生成。因此,修复工作是确保为 Debug 和 Release 配置启用 XML 文档。

我能够仅使用发布配置文件 .pubxml中的自定义 MSBuild 目标来解决这个问题。按照下面的步骤。

最终结果是,此 MSBuild 目标将把所有 .xml文件从 Web API 的 bin 文件夹复制到要发布的 bin 文件夹。无需将这些文件复制到 App_Data

1)从 [Project Folder]\Properties\PublishProfiles开启适当的 .pubxml档案。

2)在 <Project><PropertyGroup>标签中添加以下代码片段:

<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>


<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>

3)在 <PropertyGroup>标签后面添加这个片段:

      <Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="bin\*.xml" />


<FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>

这要归功于 这个答案,它解决了在发布时如何包含来自项目目录外的文件的问题。

如果您的站点正在使用发布配置文件(例如,如果您从 ISP 下载了一个发布配置文件) ,您需要确保以下选项设置为 False

<ExcludeApp_Data>False</ExcludeApp_Data>

XML 文件的属性可以设置为: 建立行动-内容, 复制到输出目录-始终如此

但是如果上面的参数在发布配置文件中设置为 True,那么您的 XML 文件将永远不会被发布。我可是吃了不少苦头才知道的。

作为对前一个答案的补充,还有另一种类型的标签需要包括,如下文所示:

Https://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-extra-files

标签:

<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>

打开您的 Publishprofile (* . pubxml)并将此代码包含到“ Project”元素中:

<ItemGroup>
<Content Include="bin\yourDocumentationFile.xml">
<CopyToOutputDirectory>true</CopyToOutputDirectory>
</Content>
<!-- Include a content to each documentation file -->
</ItemGroup>

我遇到了同样的问题,只部署了 webapi 项目中的 xml 文件。

为了解决这个问题,我必须将它添加到我的 Web (Api)项目文件中的第一个 PropertyGroup元素中。

<ExcludeXmlAssemblyFiles>false</ExcludeXmlAssemblyFiles>

之后,文档 所有项目的 xml 文件(启用它的地方)已经是 出版

如果您不想要文档文件,请转到 helppageconfig.cs 并注释掉

config.SetDocumentationProvider(new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")))

你可以更改现有条件:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU' OR '$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<DocumentationFile>ProjectName.xml</DocumentationFile>
</PropertyGroup>