200 votes

Copier les fichiers dans le répertoire de sortie en utilisant csproj dotnetcore

Donc, mon problème est assez simple. Il y a des fichiers que je veux copier dans le répertoire de sortie de la construction, qu'il s'agisse d'une version de débogage ou d'une publication publiée. Toute l'information que je peux trouver concerne l'ancienne approche de configuration JSON. Quelqu'un at-il un exemple d'utilisation du csproj avec dotnetcore?

252voto

Martin Ullrich Points 5894

Il y a assez peu de moyens pour atteindre vos objectifs, en fonction de vos besoins.

L'approche la plus simple est de définir les métadonnées (CopyToOutputDirectory / CopyToPublishDirectory) conditionnel des éléments (en supposant .txt être None élément à la place de Content, si cela ne fonctionne pas, essayez <Content> plutôt):

<ItemGroup Condition="'$(Configuration)' == 'Debug'">
  <None Update="foo.txt" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

Si plus de contrôle est requis, le plus polyvalent approche consiste à ajouter des cibles que des crochets dans le processus de construction dans le fichier csproj:

<Target Name="CopyCustomContent" AfterTargets="AfterBuild">
  <Copy SourceFiles="foo.txt" DestinationFolder="$(OutDir)" />
</Target>
<Target Name="CopyCustomContentOnPublish" AfterTargets="Publish">
  <Copy SourceFiles="foo.txt" DestinationFolder="$(PublishDir)" />
</Target>

Cette fonction permet de copier un fichier dans le répertoire respectif. Pour plus d'options pour l' <Copy> tâche de voir sa documentation. Pour le limiter à certaines configurations, vous pouvez utiliser un Condition d'attribut:

<Target … Condition=" '$(Configuration)' == 'Release' ">

Cette Condition attribut peut être appliqué à la fois sur l' <Target> de l'élément ou de la tâche éléments comme l' <Copy>.

173voto

Mr Moose Points 2264

Bien que cela m'a aidé à résoudre mon problème, cela ne fonctionnait pas pour tous les fichiers d'un sous-répertoire. J'ai également utilisé Content Include plutôt que Content Update ;

 <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Content Include="layouts\*.*">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>  
  </ItemGroup>

</Project>
 

19voto

Chad Kuehn Points 240

Placez-le dans votre fichier .csproj en remplaçant nlog.config par le chemin de fichier souhaité. Ensuite, sauvegardez-le et construisez votre projet:

 <ItemGroup>
  <Content Update="Nlog.config">
    <CopyToOutputDirectory>Always</CopyToOutputDirectory>
  </Content>
</ItemGroup>
 

8voto

hngr18 Points 305

J'avais besoin d'une sélection de modèles HTML pour être consommable à la fois côté client et côté serveur (Handlebars js)

 <Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Content Update="wwwroot\html-templates\**\*.*">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

</Project>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X