Given aspnet project with folders:
/
/sql
/WebApp
/Client
/wwwroot
/Views
On project.json I used
"publishOptions": {
"include": [
"..\\sql",
"wwwroot",
"Views",
"web.config"
]
}
And after dotnet publish
there was sql
, wwwroot
and Views
folders.
After migration to csproj (Microsoft.NET.Sdk.Web), I got
<None Update="..\sql\**\*;wwwroot\**\*;Views\**\*">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
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.
I also try to change it to:
<Content Include="..\sql\**" CopyToPublishDirectory="PreserveNewest" />
<Content Remove="Client\*" CopyToPublishDirectory="Never" />
and got same output.
How to remove Client
and preserve folder structure for sql
?
Update:
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" />
Original:
You can use this:
<ItemGroup>
<Content Remove="Client\**" />
<Content Include="..\sql\**" CopyToPublishDirectory="PreserveNewest" Link="sql\%(RecursiveDir)\%(Filename)%(Extension)" />
</ItemGroup>
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).
Alternative to <Content Remove="..." />
you can also do this to still have the files inside VS:
<Content Update="Client\**" CopyToPublishDirectory="Never" />
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With