ASP.NET Core: Exclude or include files on publish
From documentation: if you wish to specify, for example, some files to get published with your app, you can still use the known mechanisms in
csproj
for that (for example, the<Content>
element).
There is a CopyToPublishDirectory
attribute for ItemGroup
elements that determines whether to copy the file to the publish directory and can have one of the following value:
- Always,
- PreserveNewest
- Never
Note, that there is also similar CopyToOutputDirectory
attribute for output folder.
Example (from here):
<ItemGroup>
<None Include="notes.txt" CopyToOutputDirectory="Always" />
<!-- CopyToOutputDirectory = { Always, PreserveNewest, Never } -->
<Content Include="files\**\*" CopyToPublishDirectory="PreserveNewest" />
<None Include="publishnotes.txt" CopyToPublishDirectory="Always" />
<!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } -->
</ItemGroup>
If you are interesting how project.json -.csproj
migration use CopyToPublishDirectory
attribute to migrate publish options, you may look into MigratePublishOptionsRule class in dotnet cli repo.
After Visual Studio 2017 15.3
Edit the .csproj file to manually exclude files/folder from being published
<ItemGroup>
<Content Remove="src\**" />
<Content Remove="node_modules\**" />
</ItemGroup>
ref: https://www.danielcrabtree.com/blog/273/fixing-the-duplicate-content-error-after-upgrading-visual-studio-2017
In .csproj
for Visual Studio versions 15.3 and higher, this keeps the files visible in Visual Studio (whereas "Content Remove" does not), and prevents the files from being published.
<ItemGroup>
<Content Update="appsettings*.json" CopyToPublishDirectory="Never" />
</ItemGroup>