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 utilisant le csproj avec dotnetcore?
Il existe plusieurs moyens d'atteindre vos objectifs, en fonction de vos besoins.
La méthode la plus simple consiste à définir les éléments de métadonnées (CopyToOutputDirectory
/CopyToPublishDirectory
) de manière conditionnelle (en supposant que .txt
soit un élément None
au lieu de Content
, si ce n'est pas le cas. travail, essayez plutôt <Content>
):
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<None Update="foo.txt" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
Si davantage de contrôle est requis, l’approche la plus polyvalente consiste à ajouter des cibles personnalisées qui s’intègrent au 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>
Ceci copie un fichier dans les répertoires respectifs. Pour plus d'options pour la tâche <Copy>
, voir sa documentation . Pour limiter cela à certaines configurations, vous pouvez utiliser un attribut Condition
:
<Target … Condition=" '$(Configuration)' == 'Release' ">
Cet attribut Condition
peut être appliqué à la fois sur l'élément <Target>
ou sur des éléments de tâche tels que <Copy>
.
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 aussi 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>
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>
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>
Merci de sauver ma journée. Si vous devez forcer la copie d’un paquet nuget spécifique dans un projet central asp.net (2.2), ajoutez à la fin de votre csproj:
<!-- Force copy MathNet because we need it in compilation -->
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="Build">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll'))" />
</Target>
<ItemGroup>
<ContentWithTargetPath Include="..\packages\MathNet.Numerics.4.8.1\lib\netstandard2.0\MathNet.Numerics.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<TargetPath>MathNet.Numerics.dll</TargetPath>
</ContentWithTargetPath>
</ItemGroup>