给出带有文件夹的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核心发布:在输出中包含/排除目录
发布评论