¿Por qué ClickOnce en Visual Studio no despliega archivos de contenido desde ensamblajes dependientes?

Tengo una aplicación de cliente inteligente que se implementa mediante un clic una vez. El problema es que tengo archivos de contenido en ensamblajes dependientes que simplemente no aparecen en el diálogo de archivos de la aplicación publicada en Visual Studio.

Esto significa que cada vez que despliegue tengo que copiar todos los archivos de contenido desde el directorio de salida de comstackción de la aplicación en el directorio publicado y reconstruir los manifiestos, lo cual es un verdadero problema.

¿Por qué estos archivos no son visibles para el editor en Visual Studio?

Parecía haber encontrado una evolución de la respuesta de @John Hunter que es mucho más simple, agrégalo al csproj.

    

Esto hará que Visual Studio vea automáticamente todos los archivos * .rpt en esa carpeta como parte de la solución. Puedes ir con *.* Para acumular todo. Esto tiene más sentido si tiene una carpeta de contenedor como bin\MyDeployables\**\*.*

Seguimos un uso similar para utilizar Cassette MSBuild para combinar y minifigurar nuestro JS en tiempo de publicación, y poder publicar los archivos creados a través de las herramientas de publicación de VS incorporadas.

Creo que mi respuesta de esta publicación responde a tu pregunta.

Resumen
Ya sea…
Agregue sus archivos de contenido a su proyecto usando la función “Agregar como enlace”.
O…
Cree un evento posterior a la creación para copiar sus archivos de contenido a la carpeta de salida principal.

De acuerdo, todavía no sé por qué Visual Studio no puede mostrar los archivos de contenido referenciados con su publicación ui, pero encontré una solución alternativa para obligar a la publicación a incluir estos archivos.

Como sugiere este artículo de MSDN , colóquelo en el archivo del proyecto.

   False         

Tenga en cuenta que, en algunas circunstancias, puede ser necesario reiniciar Visual Studio (no solo volver a cargar el proyecto) para que estos cambios surtan efecto.

Supongo que esta solución se basó en: http://blogs.msdn.com/mwade/archive/2008/06/29/how-to-publish-files-which-are-not-in-the-project.aspx

Según mi comentario reciente en la publicación:

¿En qué punto deberíamos esperar que aparezcan en los listados de “Archivos de aplicación” (si es que los hay)?

¿O es seguro asumir que terminarán en nuestra lista de archivos de datos desplegados?

En mi caso, espero usar:

Falso

Para incluir todos los archivos de contenido de ensamblados dependientes que se encuentran dentro de la subcarpeta “Recursos” del directorio de comstackción.

Andrés.

Agregar esto al final de su .csproj / .vbproj corrige este problema. Toma los elementos de destino ya almacenados en caché de los proyectos dependientes y los agrega explícitamente al manifiesto de la aplicación, que luego también se publica en el manifiesto de distribución

        <_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)">   

Estoy pensando en publicar esta característica en un paquete .NuGet, para facilitar la instalación de este script. Voy a publicar un enlace cuando tenga uno.