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

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

问题描述

给出带有文件夹的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不适用于我),其中只有json个文件,其中有wwwrootViewsClient. 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时,有一项新功能可以自动为一些已知项目类型(包括Content)添加Link元数据.可以这样使用:

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核心发布:在输出中包含/排除目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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