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

时间:2014-05-15 14:41:57

标签: asp.net-mvc-4 asp.net-web-api msbuild publish-profiles

我有MVC 4.0 WebApi项目,带有自动生成的帮助based on this

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

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

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

9 个答案:

答案 0 :(得分:159)

我有一个类似的问题,对我来说,答案有点像" doh!"时刻。

在项目设置中,我只在Debug配置下启用了XML文档文件,而不是在Release下。我正在使用Release进行部署,因此实际上并没有生成XML文档。因此,修复程序确保为调试和发布配置启用XML文档。

答案 1 :(得分:41)

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

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

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

答案 2 :(得分:23)

我能够使用发布配置文件.pubxml文件中的自定义MSBuild目标来解决此问题。请按照以下步骤操作。最终结果是此MSBuild目标将所有.xml文件从Web API的bin文件夹复制到您要发布的bin文件夹。无需将这些文件复制到App_Data。

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

2)在<Project><PropertyGroup>代码中添加此代码段:

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

3)在<PropertyGroup>代码后添加此代码段:

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

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

信用转到this answer,它解决了在发布时如何从项目目录外部包含文件。

答案 3 :(得分:10)

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

要修复它,我必须在第一个public class Publication { public List<string> Authors { get; set; } public string Title { get; set; } } class Program { static void Main() { IEnumerable<Publication> publications; // YOUR DATA HERE! var groupsByAuthor = publications.SelectMany(publication => publication.Authors.Select(author => new { Publication = publication, Author = author })).GroupBy(x => x.Author); foreach (var gba in groupsByAuthor) { Console.WriteLine(gba.Key); foreach (var pub in gba) { Console.WriteLine(pub.Publication.Title); } } Console.ReadLine(); } } 元素中将其添加到我的Web(Api)项目文件中。

PropertyGroup

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

答案 4 :(得分:6)

一种方法是将XML文件添加到项目内的&#34; App_Data &#34;文件夹中,然后在visual studio中选择一个文件到其属性&#34; 复制到输出目录&#34;到&#34; 始终&#34;。enter image description here

答案 5 :(得分:6)

补充上一个答案,还有另一种类型的标签,如下文所述:

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

标签:

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

答案 6 :(得分:4)

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

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

答案 7 :(得分:0)

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

<ExcludeApp_Data>False</ExcludeApp_Data>

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

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

答案 8 :(得分:0)

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

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