【问题标题】:dotnet core publish: include/exclude dir in outputdotnet core publish:在输出中包含/排除目录
【发布时间】:2017-04-23 10:13:47
【问题描述】:

给定带有文件夹的 aspnet 项目:

/
  /sql
  /WebApp
    /Client
    /wwwroot
    /Views

在我使用的 project.json 上

"publishOptions": {
    "include": [
      "..\\sql",
      "wwwroot",
      "Views",
      "web.config"
    ]
  }

在dotnet publish 之后是sql、wwwroot 和Views 文件夹。

迁移到csproj(Microsoft.NET.Sdk.Web)后,我得到了

<None Update="..\sql\**\*;wwwroot\**\*;Views\**\*">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>

在msbuild15 /t:publish 之后(cli 不适用于我)有wwwroot、Views 和Client,里面只有json 文件。来自sql 的文件已复制但已展平。

我也尝试改成:

<Content Include="..\sql\**" CopyToPublishDirectory="PreserveNewest" />
<Content Remove="Client\*" CopyToPublishDirectory="Never" />

并得到相同的输出。

如何删除Client 并保留sql 的文件夹结构?

【问题讨论】:

    标签: msbuild .net-core


    【解决方案1】:

    更新:

    当使用 VS 2017 >= 15.3 或 .NET CLI 版本 >= 2.0 时,有一项新功能可以自动为一些已知项目类型(包括 Content)添加 Link 元数据。这可以像这样使用:

    <Content Include="..\sql\**" LinkBase="sql" />
    

    原文:

    你可以用这个:

      <ItemGroup>
        <Content Remove="Client\**" />
        <Content Include="..\sql\**" CopyToPublishDirectory="PreserveNewest" Link="sql\%(RecursiveDir)\%(Filename)%(Extension)" />
      </ItemGroup>
    

    内容包括项目的链接元数据有点 hack,使 MSBuild 使用项目的相对路径作为目标路径。这是因为如果“项目锥”之外的项目没有 Link 元数据 (source),则不会在 AssignTargetPath 中考虑它们。

    作为&lt;Content Remove="..." /&gt; 的替代方案,您也可以这样做以在 VS 中保留文件:

    <Content Update="Client\**" CopyToPublishDirectory="Never" />
    

    【讨论】:

    • 这会在 SoultionExplorer 中显示 sql 文件夹,所以我将其替换为 &lt;Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(TargetDir)\sql\%(RecursiveDir)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" ContinueOnError="false" /&gt; AfterTargets=Publish
    • 您还可以在 Content Include 元素上设置 Visible="false" 以对解决方案资源管理器隐藏文件。
    猜你喜欢
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多