Existem várias maneiras de atingir seus objetivos, dependendo de quais são suas necessidades.
A abordagem mais fácil é definir os itens de metadados ( CopyToOutputDirectory
/ CopyToPublishDirectory
) condicionalmente (assumindo .txt
ser um None
item em vez de Content
, se não funcionar, tente <Content>
):
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<None Update="foo.txt" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
Se mais controle for necessário, a abordagem mais versátil é adicionar destinos personalizados que se conectam ao processo de compilação no arquivo 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>
Isso copia um arquivo para os respectivos diretórios. Para mais opções para a <Copy>
tarefa, consulte sua documentação . Para limitar isso a certas configurações, você pode usar um Condition
atributo:
<Target … Condition=" '$(Configuration)' == 'Release' ">
Este Condition
atributo pode ser aplicado tanto no <Target>
elemento quanto em elementos de tarefa como <Copy>
.
DestinationSubDirectory="subdir\"
metadados emReference
itens diretamente. No entanto, isso significa que você mesmo precisa implementar a resolução de montagem ( evento AssemblyResolve )Embora isso tenha me ajudado a resolver o problema, não funcionou para todos os arquivos em um subdiretório. Eu também usei em
Content Include
vez deContent Update
;fonte
<Content Include="layouts\**\*.*">
<Project Sdk="Microsoft.NET.Sdk.Web">
), ele não permitirá que você use,Include=
porque já parece especificar isso implicitamente no SDK. Eu tive que usarUpdate=
para obtê-lo para construir e incluir meus arquivos adicionais.assets\*.*
deve assumi-lo. Mas ele copia a pasta de ativos completa. Então, eu tenho,bin/Debug/netcoreapp3.1/assets/...
mas quero os arquivos da pasta de ativos no diretório raiz da saída.bin/Debug/netcoreapp3.1/...
.xml <Project Sdk="Microsoft.NET.Sdk"> <ItemGroup> <AssetsSourceFiles Include="assets/**/*.*"/> </ItemGroup> <Target Name="CopyCustomContent" AfterTargets="AfterBuild"> <Copy SourceFiles="@(AssetsSourceFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" /> </Target> </Project>
(veja minha resposta para um formato de código melhor.)Coloque-o no arquivo .csproj substituindo nlog.config pelo caminho de arquivo desejado. Em seguida, basta salvá-lo e construir seu projeto:
fonte
Supondo que você tenha uma
assets
pasta em seu diretório raiz. Você pode nomeá-lo como quiser. Este é apenas um exemplo:your-project.csproj
isso copia apenas o conteúdo da
assets
pasta para a raiz de saída sem envolvê-lo naassets
pasta. Mas se quiser copiar com a própria pasta, você pode usar o seguinte código:fonte
Tive a necessidade de uma seleção de modelos HTML para serem consumíveis tanto no lado do cliente quanto no lado do servidor (Handlebars js)
fonte
Obrigado, você salva o meu dia, se você precisar forçar a cópia de um pacote nuget específico em um projeto principal asp.net (2.2), adicione no final de seu csproj:
fonte
ou
fonte