dotnet core publish:在输出中包含/排除目录 [英] dotnet core publish: include/exclude dir in output

查看:12
本文介绍了dotnet core publish:在输出中包含/排除目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Given aspnet project with folders:

/
  /sql
  /WebApp
    /Client
    /wwwroot
    /Views

在我使用的 project.json 上

On project.json I used

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

dotnet publish之后还有sqlwwwrootViews文件夹.

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

After migration to csproj (Microsoft.NET.Sdk.Web), I got

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

msbuild15/t:publish(cli 对我不起作用)之后有 wwwrootViewsClient 里面只有 json 文件.sql 中的文件已复制但已展平.

After msbuild15 /t:publish (cli not works for me) there is wwwroot, Views AND Client with only json files inside. Files from sql copied but flattened.

我也尝试改成:

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

并得到相同的输出.

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

How to remove Client and preserve folder structure for sql?

推荐答案

更新:

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

When using VS 2017 >= 15.3 or a .NET CLI version >= 2.0, there is a new feature that automatically adds Link metadata for a few known item types (including Content). This can be used like:

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

原文:

你可以用这个:

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

内容包括项目的链接元数据有点破解,使 MSBuild 使用项目的相对路径作为目标路径.这是因为如果项目锥"之外的项目没有 Link 元数据(来源).

The content include item's link metadata is a bit of hack to make MSBuild use the item's relative path as target path. This is because items outside of the "project cone" aren't considered in AssignTargetPath if they have no Link metadata (source).

<Content Remove="..."/> 的替代方案,您也可以这样做以在 VS 中保留文件:

Alternative to <Content Remove="..." /> you can also do this to still have the files inside VS:

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

这篇关于dotnet core publish:在输出中包含/排除目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆