Respostas:
O artigo MSDN na propriedade build action explica as diferenças.
Nenhum - o arquivo não está incluído no grupo de saída do projeto e não é compilado no processo de construção. Um exemplo é um arquivo de texto que contém documentação, como um arquivo Leiame.
Conteúdo - O arquivo não é compilado, mas está incluído no grupo de saída Conteúdo. Por exemplo, essa configuração é o valor padrão para um arquivo .htm ou outro tipo de arquivo da Web.
Uma diferença é como eles são publicados; Os itens "Nenhum" não são incluídos em uma publicação, os itens "Conteúdo"; por exemplo, na caixa de diálogo "Arquivos de aplicativos" na guia Publicar.
CopyToOutputDirectory
conjunto para true
ele vai ser publicado em umdotnet publish
Não tenho 100% de certeza (li a descrição do MSDN da propriedade Build Action ), mas apenas copiar essa resposta do MSDN para o StackOverflow não responde a pergunta completamente para mim.
A diferença de Nenhum e Conteúdo apenas afeta os projetos da Web. Para um projeto de linha de comando, projeto WinForm ou projeto UnitTest (no meu caso) etc. Nenhum e Conteúdo têm um comportamento diferente.
MSDN: "grupo de saída do projeto" ou "grupo de saída de conteúdo" apenas termos usados em um projeto da Web, certo?
None
vs Content
apenas tem efeito na etapa de publicação e não na etapa de compilação . Para a etapa de compilação, parece que CopyToOutputDirectory
pode ser definido em qualquer uma delas e que controla se o arquivo é copiado pela etapa de compilação. Também parece estranho que, por padrão, os modelos T4 sejam adicionados como Content
itens e não None
itens.
Na minha situação, meu arquivo MSBuild tinha um ItemGroup
para recursos de imagem que apareceram da seguinte maneira:
<ItemGroup>
<Content Include="Resources\image001.png" />
<Content Include="Resources\image002.png" />
<Content Include="Resources\image003.png" />
<Content Include="Resources\image004.png" />
<None Include="Resources\image005.png" />
<None Include="Resources\image006.png" />
<None Include="Resources\image007.png" />
</ItemGroup>
Enquanto meu projeto estava construindo bem, isso deixou-me perguntando por que eu tinha uma mistura de Content
e None
elementos do tipo de item na minha ItemGroup
. Este artigo do MSDN (para Visual Studio 2010) me deu as orientações que eu procurava:
Observe que quando o editor de recursos adiciona uma imagem, ele define Build Action como None , porque o arquivo .resx faz referência ao arquivo de imagem. No momento da criação, a imagem é puxada para o arquivo .resources criado a partir do arquivo .resx. A imagem pode ser acessada facilmente por meio da classe fortemente tipada gerada automaticamente para o arquivo .resx. Portanto, você não deve alterar essa configuração para Recurso incorporado , pois isso incluiria a imagem duas vezes na montagem.
Resolução: com esta orientação, usando um editor de texto, alterei os Content
elementos de tipo de item para None
.
Além disso, para obter uma visão geral dos itens do MSBuild, consulte este artigo do MSDN .
Eu tenho um projeto que não contém itens compiláveis (ele armazena html e javascript para testes de unidade de jasmim).
Um dia minha solução (que continha o referido projeto) parou de compilar dizendo "O destino" Compilar "não existe no projeto".
Eu adicionei uma importação para trazer o compilador, que funcionou bem na minha máquina, mas falhou ao usar o msbuild no servidor de compilação.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Eu mudei uma linha de
<None Include="SpecRunner.html" />
para
<Content Include="SpecRunner.html" />
e funcionou também no servidor de compilação.
Você não precisa de Nenhum em um arquivo de projeto de modelo para incluir os arquivos definidos no .vstemplate, caso contrário, eles serão perdidos no processo de criação e conversão. Eles são deixados para trás na pasta temporária usada para criar tudo e, em seguida, excluídos logo em seguida.
No meu caso .Pubxml é um desses arquivos da lista Nenhum . Não se destina à criação de soluções ou como um arquivo estático para projeto da web. Mas para publicar o site no Azure, as configurações estão presentes nisso.
De acordo com o artigo da Microsoft, estes são os principais tipos que vemos entre as tags de arquivo .csproj :
Nenhum - o arquivo não está incluído no grupo de saída do projeto e não é compilado no processo de construção. Um exemplo é um arquivo de texto que contém documentação, como um arquivo Leia-me.
Compilar - O arquivo é compilado na saída da compilação. Essa configuração é usada para arquivos de código.
Conteúdo - O arquivo não é compilado, mas está incluído no grupo de saída Conteúdo. Por exemplo, essa configuração é o valor padrão para um arquivo .htm ou outro tipo de arquivo da Web.
Recurso incorporado - esse arquivo é incorporado na saída de compilação do projeto principal como uma DLL ou executável. Geralmente é usado para arquivos de recursos.
Os arquivos de conteúdo não são incluídos em uma construção, mas em uma publicação.
Nenhum arquivo não é incluído em uma construção ou publicação, a menos que seja configurado por você. Por exemplo, uma configuração "Copiar no diretório de saída" de "Sempre" ou "Mais recente" fará com que eles sejam incluídos na criação e publicação.
Content
s mudados paraNone
s. Acho que aconteceu quando renomeei arquivos de .ascx para .cshtml ao converter para o Razor. Mudá-los novamente corrigiu manualmente alguns problemas de implantação. Ainda bem que encontrei isso.