dotnet核心发布:在输出中包含/排除目录 [英] dotnet core publish: include/exclude dir in output
问题描述
给出带有文件夹的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
之后有sql
,wwwroot
和Views
文件夹.
迁移到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
个文件,其中有wwwroot
,Views
和Client
. 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屋!