dotnet核心发布:输出中的include/exclude dir

smg*_*smg 5 msbuild .net-core

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

/
  /sql
  /WebApp
    /Client
    /wwwroot
    /Views
Run Code Online (Sandbox Code Playgroud)

在project.json我用过

"publishOptions": {
    "include": [
      "..\\sql",
      "wwwroot",
      "Views",
      "web.config"
    ]
  }
Run Code Online (Sandbox Code Playgroud)

dotnet publishsql,wwwrootViews文件夹.

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

<None Update="..\sql\**\*;wwwroot\**\*;Views\**\*">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
Run Code Online (Sandbox Code Playgroud)

之后msbuild15 /t:publish(cli不适合我)有wwwroot,只有文件里面的ViewsAND .复制但展平的文件.Clientjsonsql

我也尝试将其更改为:

<Content Include="..\sql\**" CopyToPublishDirectory="PreserveNewest" />
<Content Remove="Client\*" CopyToPublishDirectory="Never" />
Run Code Online (Sandbox Code Playgroud)

得到相同的输出.

如何删除Client和保留文件夹结构sql

Mar*_*ich 11

更新:

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

<Content Include="..\sql\**" LinkBase="sql" />
Run Code Online (Sandbox Code Playgroud)

原版的:

你可以用这个:

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

内容包括项目的链接元数据是一些黑客,使MSBuild使用项目的相对路径作为目标路径.这是因为AssignTargetPath如果没有Link元数据(),则不考虑"项目锥"之外的项目.

替代<Content Remove="..." />你也可以这样做仍然在VS内的文件:

<Content Update="Client\**" CopyToPublishDirectory="Never" />
Run Code Online (Sandbox Code Playgroud)