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

Ale*_*tin 70 msbuild asp.net-mvc-4 asp.net-web-api publish-profiles

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

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

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

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

gri*_*mus 177

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

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

  • 这也是我的问题! (6认同)
  • 其他解决方案可能有效,但这是首先要检查的! (4认同)
  • 答案很好,但即使为Release启用了此选项,该文件也会出现在bin/Release文件夹中,但Publish不会复制该文件. (2认同)
  • 然后点击“显示所有文件”,确保.xml文件包含在“项目”中。 (2认同)

Cha*_*ati 42

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

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

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

  • 你真的不想使用"总是复制".只需将它们设置为"内容"即可.如果设置"始终复制",则最终将在bin目录下的App_Data附加一个副本. (5认同)
  • 第二种方法不适用于我.不能将xml_documentation文件复制到`bin`文件夹.xmldocument由其他类库项目生成.不是我在vs2015中发布的网络项目.BTW (5认同)

Kei*_*ith 23

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

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

2)在<Project><PropertyGroup>标签内添加此代码段:

<CopyAllFilesToSingleFolderForPackageDependsOn>
  CustomCollectFiles;
  $(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
Run Code Online (Sandbox Code Playgroud)

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

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

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

感谢这个答案,该答案解决了在发布时如何包含项目目录外部的文件.

  • 太靠近了.感谢Ivan及其与https://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/deploying-extra-files的链接.你需要做的是添加一个复制的xml节点"CopyAllFilesToSingleFolderForPackageDependsOn"标记为"CopyAllFilesToSingleFolderForMsdeployDependsOn"这样,MsDeploy也可以工作. (5认同)

mar*_*oss 15

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

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

<ExcludeXmlAssemblyFiles>false</ExcludeXmlAssemblyFiles>
Run Code Online (Sandbox Code Playgroud)

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

  • 该死,这就是为什么我这么喜欢。问题提出后几乎四年后发布的答案完全解决了我的问题。谢谢你,先生!它有效:) 该属性的文档基本上不存在。我在网上找不到任何东西。您基本上必须查看“$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets”才能了解发生了什么。 (2认同)

Toa*_*yen 7

一种方法是将XML文件添加到项目内的" App_Data "文件夹中,然后在visual studio中,选择一个文件到其属性" Copy to Ouput Directory "到" Always ".在此输入图像描述

  • 这没有任何意义.在构建过程中生成xml文件.他们不是该项目的一部分. (4认同)
  • 你真的不想使用"总是复制".只需将它们设置为"内容"即可.如果设置"始终复制",则最终将在bin目录下的App_Data附加一个副本. (3认同)
  • 不,在visual studio中,右键单击app_data文件夹,然后选择添加现有项目.接下来,选择输出XML文件以将它们添加到项目中.最后,始终将副本设置为"输出目录". (2认同)

小智 6

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

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

标签:

<CopyAllFilesToSingleFolderForMsdeployDependsOn>
  CustomCollectFiles;
  $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
Run Code Online (Sandbox Code Playgroud)


小智 6

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

<ItemGroup>
    <Content Include="bin\yourDocumentationFile.xml">
        <CopyToOutputDirectory>true</CopyToOutputDirectory>
    </Content>
    <!-- Include a content to each documentation file -->
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)