2009-02-26 11 views
14

Tengo una aplicación de cliente inteligente que se implementa mediante un clic. 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.¿Por qué ClickOnce en Visual Studio no despliega archivos de contenido desde ensamblajes dependientes?

Esto significa que cada vez que implemente tengo que copiar todos los archivos de contenido del directorio de salida de compilació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?

+2

Bastante molesto, y sigue siendo un problema en VS 2012. – tofutim

+0

También sigue siendo un problema en VS 2013, y rompieron las soluciones a continuación. –

+1

También es un problema en VS 2015. Incluirlos como [contenido vinculado] (http://stackoverflow.com/a/11808911/3367144) en el archivo csproj del proyecto dependiente funciona bien. Use una etiqueta ' false' si no desea verla en el explorador de soluciones. – kdbanman

Respuesta

10

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

<ItemGroup> 
    <Content Include="Bin\**\*.rpt" /> 
</ItemGroup> 

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 .

+0

Tenga en cuenta que probablemente tendrá que establecer TargetPath-s para los elementos de PublishFile generados dentro del archivo de proyecto, ya que de lo contrario se colocarán dentro del subdirectorio "Bin". –

+1

En Visual Studio 2013 esto copiará los archivos a 'app.publish \ Bin \ Release \ My Deployables \ filename.ext', cuando lo que realmente desea es que se copien en' app.publish \ My Deployables \ filename. ext'. –

+0

Hola a todos, ¿logró encontrar una solución para el problema "app.publish \ My Deployables \ filename.ext"? ¿Hay alguna manera de burlar una carpeta de salida final? Si no, tendré que cambiar mi código para buscar los archivos en bin \ release ... desordenado y no ideal, pero ATM con 3 horas de búsqueda no he podido hacer que esto funcione. – Ads

3

Creo que mi respuesta de this post responde a su pregunta.

Resumen
O ...
Añadir los archivos de contenido a su proyecto utilizando la función "Agregar vínculo".
O ...
Crea un evento de creación posterior para copiar tus archivos de contenido a la carpeta de salida principal.

+0

Intenté todo eso y no funciona para mí. Los archivos de contenido de los ensamblajes dependientes ya están en la carpeta de salida, pero no aparecen en el cuadro de diálogo de archivos de la aplicación, incluso si selecciono mostrar todos los archivos. ¿Hay algo más que me falta aquí? –

+0

¿Cuáles son, específicamente, sus "archivos de contenido"? ¿Qué extensión de archivo tienen? – codeConcussion

+0

.rpt para archivos de informes de cristal principalmente. –

3

Ok 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 para forzar la publicación para incluir estos archivos.

Según lo sugerido por this MSDN article, colóquelo en el archivo del proyecto.

<ItemGroup> 
<AdditionalPublishFile Include="$(OutputPath)\**\*.rpt"> 
    <Visible>False</Visible> 
</AdditionalPublishFile> 
</ItemGroup> 
<Target Name="BeforePublish"> 
    <Touch Files="@(IntermediateAssembly)" /> 
    <CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(extension);IsDataFile=false"> 
    <Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" /> 
    </CreateItem> 
</Target> 

Tenga en cuenta que en algunas circunstancias reiniciar Visual Studio (no sólo volver a cargar el proyecto) puede ser requerido para que estos cambios surtan efecto.

+1

Desearía que hubiera una manera de hacer esto usando la IU. – tofutim

+1

He intentado esta solución pero no es viable para mí, estoy usando vs2013 sp1. – sendreams

+2

Esto ya no funciona en VS 2015 tampoco. Los archivos se cargan/publican, pero no se declaran en ningún manifiesto de implementación, por lo que el cliente no los descarga. Supongo que '_DeploymentManifestFiles' es un elemento interno que no es un objetivo de salida oficialmente admitido. – kdbanman

0

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

Según mi reciente comentario en el post:

¿En qué momento debemos esperar que estos que aparecen en el "Archivos de aplicación" listados (como mucho)?

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

En mi caso estoy esperando usar:

Falso

Para incluir todos los archivos de contenido de ensamblados dependientes que se dentro de la subcarpeta "Recursos" del directorio de compilación .

Andrew.

+0

Gracias por este enlace, es exactamente lo que estaba buscando. –

Cuestiones relacionadas