dotnet core publish:在输出中包含/排除目录 [英] 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 对我不起作用)之后有 wwwroot
、Views
和 Client
里面只有 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屋!