Excluding File From Publish Directory in VS 2017 .

2020-03-01 10:40发布

问题:

I have a .gitignore file in the wwwroot folder of my project that I am trying to exclude from being published. The following code does not seem to work:

<ItemGroup>
  <Content Include="wwwroot\.gitignore">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </Content>
</ItemGroup>

When I publish the project using the dotnet publish command, the .gitignore file is still found in the output directory.

回答1:

You have to use Update like so:

<Content Update="wwwroot\.gitignore">
  <CopyToPublishDirectory>Never</CopyToPublishDirectory>
</Content>


回答2:

Replace your code

<Content Include="wwwroot\.gitignore"> with 
<None Include="wwwroot\.gitignore">

How did I get to know this? While going through the code of .csproj file I came across this tag (None) that was put by visual studio in front of all publish profiles' file (.pubxml). so I tried with my files as well and it worked like a charm.

The MSDN article on the build action property explains the differences.



回答3:

Unfortunately the voted answer did not work for me. I had an ASP.NET Core web project and I was using Web Deploy to a remote server. I was trying to exclude a whole folder under wwwroot from being included in the deployment and after various trials and different combinations of things the only thing that worked for me was a combination of both:

  1. Exclude the folder from the project (i.e. right-click > Exclude from project)

AND

  1. Adding the following to my .csproj exactly as it is but changing wwwroot\\profiles to be the directory you want to exclude. You also have to repeat the whole snippet for each folder you want to exclude:
  <ItemGroup>
    <MsDeploySkipRules Include="CustomSkipFolder">
      <ObjectName>dirPath</ObjectName>
      <AbsolutePath>wwwroot\\profiles</AbsolutePath>
    </MsDeploySkipRules>
  </ItemGroup>