asp.net webapi发布-无法复制xml文件


77

我有基于此自动生成的帮助MVC 4.0 WebApi项目。

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

在本地调试中一切正常-xml文件已复制到项目目录,我看到了来自其他项目的字段/类的注释。

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


Answers:


201

我有一个类似的问题,对我来说,答案有点“道歉”!时刻。

在项目设置中,我仅在Debug配置下启用了XML文档文件,而在Release下则未启用。我正在使用Release进行部署,因此实际上并未生成XML文档。因此,解决方案是确保为Debug和Release配置启用XML文档。


7
这也是我的问题!
暗恋

6
其他解决方案可能会起作用,但这是首先要检查的!
Alfredo A.

1
你是人间的神!

3
很好的答案,但是即使为Release启用了此选项,文件仍位于bin / Release文件夹中,但是Publish不会复制该文件。
MeanGreen

2
并单击Show All Files确保.xml文件是Included In Project
永恒的时间

42

您可以通过两种不同的方式来做到这一点:

1)转到项目属性->选择构建选项->检查“ XML文档文件”->添加路径“ App_data \ XMLDocument.xml”->保存设置,构建项目->包括XMLDocument。 xml文件->选择属性->复制到输出目录->选择“始终复制”

2)转到项目属性->选择“打包/发布Web”选项->要显示的项目->从下拉列表中选择“此项目中的所有文件”


澄清:如果您在两个项目中都进行了步骤1),则在主API项目中的/ bin / App_Data文件夹下,您将复制两个xml文档。
2015年

5
您确实不想使用“始终复制”。只需将它们设置为“内容”即可。如果设置“始终复制”,则最终将在bin目录下获得App_Data的其他副本。
TechSavvySam

5
第二种方法对我不可用。无法将xml_documentation文件复制到该bin文件夹。xmldocument由其他类库项目生成。不是我发布的网络项目。vs2015中的BTW
huoxudong125 '16

28

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

要修复它,我必须将此添加到我的Web(Api)项目文件中的第一个PropertyGroup元素内。

<ExcludeXmlAssemblyFiles>false</ExcludeXmlAssemblyFiles>

之后,所有项目的文档xml文件(已启用的地方)都已发布


我必须添加此属性,还必须执行提供的答案@grimus中描述的修复程序才能使其正常工作。感谢您添加此答案!
drewmerk '18

此修复程序对我
有用

1
该死的,这就是为什么我如此爱。提出问题后将近4年后发布的答案完全解决了我的问题。谢谢你,先生!它可以工作:)基本上没有此属性的文档。我在网上找不到任何东西。您基本上必须调查一下发生了$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets什么。
Mariusz Pawelski

这包括所有程序集的所有.xml。如果您只需要包括一些特定的内容,请使用@Keith回答方法
JotaBe

28

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

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

1).pubxml从打开相应的文件[Project Folder]\Properties\PublishProfiles

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>

值得一提的是,这个答案解决了发布时如何从项目目录外部包括文件的问题。


1
不幸的是,该解决方案不适用于Web部署。
亚历山大·帕夫连科

6
太近了。感谢Ivan以及他对asp.net/mvc/overview/deployment/visual-studio-web-deployment/…的链接。您还需要添加标记为“ CopyAllFilesToSingleFolderForMsdeployDependsOn”的“ CopyAllFilesToSingleFolderForPackageDependsOn”的重复xml节点,这样MsDeploy也将起作用。
cdmdotnet

8

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

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

7

一种方法是将XML文件添加到项目内的“ App_Data ”文件夹中,然后在Visual Studio中,将文件选择为其属性“复制到Ouput目录”以“始终”。在此处输入图片说明


1
我是否正确理解我应该手动将xml文件复制到Api项目,并在每次注释/代码更改后重复它?
亚历山大·Subbotin

2
否,在Visual Studio中,右键单击app_data文件夹,然后选择添加现有项。接下来,选择输出XML文件以将它们添加到项目中。最后,将副本设置为始终输出目录。
Toan Nguyen 2014年

3
您确实不想使用“始终复制”。只需将它们设置为“内容”即可。如果设置“始终复制”,则最终将在bin目录下获得App_Data的其他副本。
TechSavvySam 2016年

4
这没有任何意义。xml文件是在构建过程中生成的。它们不是项目的一部分。
ewahner


0

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

<ExcludeApp_Data>False</ExcludeApp_Data>

可以将XML文件的属性设置为:构建操作-内容,复制到输出目录-始终

但是,如果在发布配置文件中将以上参数设置为True,那么您的XML文件将永远不会发布。很难学到这一点。


-1

如果您不希望文档文件转到HelpPageConfig.cs并注释掉

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.