【问题标题】:asp.net webapi publish - xml files not copyasp.net webapi 发布 - xml 文件不复制
【发布时间】:2014-07-04 02:17:11
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

你可以改变现有的条件:

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

【讨论】:

    【解决方案2】:

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

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

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

    2) 在&lt;Project&gt;&lt;PropertyGroup&gt; 标签内添加这个sn-p:

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

    3) 在&lt;PropertyGroup&gt; 标签之后添加这个sn-p:

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

    感谢this answer,它解决了如何在发布时包含来自项目目录之外的文件。

    【讨论】:

    • 很遗憾,此解决方案不适用于 Web 部署。
    • 太接近了。感谢 Ivan 和他对asp.net/mvc/overview/deployment/visual-studio-web-deployment/… 的链接。您还需要添加一个标记为“CopyAllFilesToSingleFolderForMsdeployDependsOn”的“CopyAllFilesToSingleFolderForPackageDependsOn”的重复 xml 节点,这样 MsDeploy 也可以工作。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      <ExcludeXmlAssemblyFiles>false</ExcludeXmlAssemblyFiles>
      

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

      【讨论】:

      • 我必须添加此属性并执行@grimus 提供的答案中描述的修复以使其正常工作。感谢您添加此答案!
      • 这个修复对我有用
      • 该死,这就是我喜欢 SO 的原因。在提出完全解决我的问题的问题后将近 4 年后发布的答案。谢谢你,先生!它有效 :) 此属性的文档基本上不存在。我在网上找不到任何东西。您基本上必须查看$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets 以了解发生了什么。
      • 这包括所有程序集的所有 .xml。如果您只需要包含几个特定的​​,请使用@Keith 回答方法
      • martinoss 您说将其添加到第一个 PropertyGroup 元素中,但这只会在我的特定文件中启用它以进行调试。需要检查 PropertyGroup 元素是什么并将其添加到您需要的地方(可能在两个地方,Debug 和 Release)
      【解决方案5】:

      打开您的发布配置文件 (*.pubxml) 并将此代码包含到“项目”元素中:

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

      【讨论】:

        【解决方案6】:

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

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

        标签:

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

        【讨论】:

          【解决方案7】:

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

          <ExcludeApp_Data>False</ExcludeApp_Data>
          

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

          但如果在发布配置文件中将上述参数设置为 True,那么您的 XML 文件将永远不会被发布。学到了很多东西。

          【讨论】:

            【解决方案8】:

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

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

            【讨论】:

            • 不错的答案,但即使为 Release 启用了此选项,该文件仍存在于 bin/Release 文件夹中,但 Publish 不会复制该文件。
            • 同时点击Show All Files确保.xml文件是Included In Project
            • 在拥有自己的 Doh 之前,我已经阅读了“我只启用了...”!此刻。谢谢!
            【解决方案9】:

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

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

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

            【讨论】:

            • 澄清:如果您在两个项目中都执行第 1) 点,那么在 /bin/App_Data 文件夹下的主 API 项目中,您将复制两个 xml 文档。
            • 你真的不想使用“总是复制”。只需将它们设置为键入“内容”即可。如果您设置“始终复制”,您最终会在 bin 目录下的 App_Data 中额外复制一份。
            • 第二种方法不适用于我。无法将 xml_documentation 文件复制到 bin 文件夹。 xmldocument 由其他类库项目生成。不是我在 vs2015 中发布的网络项目。顺便说一句
            【解决方案10】:

            一种方法是将 XML 文件添加到项目内的“App_Data”文件夹中,然后在 Visual Studio 中,选择一个文件到其属性“复制到输出目录”到“总是”。

            【讨论】:

            • 我是否正确理解我应该手动将 xml 文件复制到 Api 项目并在每次评论/代码更改后重复它?
            • 不,在Visual Studio中,右键单击app_data文件夹,然后选择添加现有项目。接下来,选择输出 XML 文件以将它们添加到项目中。最后,将输出目录的副本设置为始终。
            • 你真的不想使用“总是复制”。只需将它们设置为键入“内容”即可。如果您设置“始终复制”,您最终会在 bin 目录下的 App_Data 中额外复制一份。
            • 这没有任何意义。 xml 文件是在构建过程中生成的。它们不是项目的一部分。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-09-10
            • 2017-10-30
            • 1970-01-01
            相关资源
            最近更新 更多