Por que o ClickOnce no Visual Studio não implementa arquivos de conteúdo de assemblies dependentes?

Eu tenho um aplicativo cliente inteligente que é implantado via clique uma vez. O problema é que eu tenho arquivos de conteúdo em assemblies dependentes que simplesmente não aparecem na checkbox de diálogo de arquivos de aplicativos publicados no visual studio.

Isso significa que toda vez que eu implantar, eu tenho que copiar todos os arquivos de conteúdo do diretório de saída de compilation do aplicativo para o diretório publicado e reconstruir os manifestos, o que é um verdadeiro problema.

Por que esses arquivos não são visíveis para o editor no visual studio?

Eu pareço ter encontrado uma evolução da resposta do @John Hunter que é muito mais simples, adicione isso ao csproj.

    

Isso fará com que o visual studio visualize automaticamente todos os arquivos * .rpt nessa pasta como parte da solução. Você poderia ir com *.* Para acumular tudo. Isso faz mais sentido se você tiver uma pasta contêiner como bin\MyDeployables\**\*.*

Seguimos um uso similar para usar o Cassette MSBuild para combinar e minorar nosso JS no momento da publicação, e sermos capazes de publicar os arquivos criados através do conjunto de ferramentas de publicação do VS.

Acho que minha resposta deste post responde à sua pergunta.

Resumo
Ou…
Adicione seus arquivos de conteúdo ao seu projeto usando o recurso “Adicionar como link”.
Ou…
Crie um evento de pós-compilation para copiar seus arquivos de conteúdo para a pasta de saída principal.

Ok, ainda não sei por que o Visual Studio não pode exibir arquivos de conteúdo referenciados com seu ui de publicação, mas encontrei uma solução para forçar a publicação a include esses arquivos.

Como sugerido por este artigo do MSDN , coloque isso no arquivo de projeto.

   False         

Observe que, em algumas circunstâncias, o reinício do Visual Studio (não apenas o recarregamento do projeto) pode ser necessário para que essas alterações entrem em vigor.

Presumo que esta solução tenha sido baseada em: http://blogs.msdn.com/mwade/archive/2008/06/29/how-to-publish-files-which-are-not-in-the-project.aspx

De acordo com meu recente comentário no post:

Em que ponto devemos esperar que eles apareçam nas listagens “Arquivos do Aplicativo” (se houver)?

Ou é seguro assumir que eles acabarão na lista de arquivos de dados implantados?

No meu caso, espero usar:

Falso

Para include todos os arquivos de conteúdo de assemblies dependentes que estão dentro da subpasta “Recursos” do diretório de criação.

Andrew

Adicionar isso à parte inferior do seu .csproj / .vbproj corrige esse problema. Ele pega os itens de destino já armazenados em cache de projetos dependentes e os adiciona explicitamente ao manifesto do aplicativo, que também é publicado no manifesto de distribuição

        <_allimportedcopyitems KeepDuplicates="false" KeepMetadata="CopyToOutputDirectory;TargetPath" Include="@(_AllChildProjectItemsWithTargetPath->'%(FullPath)')" Condition="'%(_AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='Always' or '%(_AllChildProjectItemsWithTargetPath.CopyToOutputDirectory)'=='PreserveNewest'" />  <_allreferenceautocopyitems KeepDuplicates="false" KeepMetadata="CopyToOutputDirectory;TargetPath" Include="@(ReferenceCopyLocalPaths)">    <_allchildprojectitemswithtargetpath Remove="@(_AllChildProjectItemsWithTargetPath)">    <_allreferenceautocopyitems Remove="%(_AllReferenceAutoCopyItems.Identity)" Condition="'%(_AllReferenceAutoCopyItems.Extension)' != '.dll'">  <_allreferenceautocopyitems Remove="@(_DeploymentManifestFiles);@(_DeploymentManifestDependencies)">       <_allreferenceautocopyitems Remove="@(_Temporary)"> <_allreferenceautocopyitems Include="@(_Temporary)"> <_temporary Remove="@(_Temporary)">    <_deploymentmanifestfiles Include="@(_AllImportedCopyItems)"> True false  <_deploymentmanifestfiles Include="@(_AllReferenceAutoCopyItems)"> True false     <_allimportedcopyitems Remove="@(_AllImportedCopyItems)"> <_allreferenceautocopyitems Remove="@(_AllReferenceAutoCopyItems)">   

Estou pensando em publicar esse recurso em um pacote .NuGet, para facilitar a instalação desse script. Vou postar um link quando tiver um.