A menudo agrego muchos archivos de contenido (principalmente imágenes y js) a mi proyecto ASP.NET. Estoy usando el sistema de publicación VS, y al publicar, los archivos nuevos no se publican hasta que los incluyo en el proyecto. Me gustaría incluir automáticamente todos los archivos en el directorio especificado. ¿Hay alguna forma de especificar qué directorios deberían incluirse automáticamente en el archivo csproj o en otro lugar?¿Hay alguna manera de incluir automáticamente archivos de contenido en el archivo de proyecto asp.net?
Respuesta
Viejo hilo, lo sé, pero encontré una manera de hacer esto que sigo olvidando, y en mi búsqueda para encontrarlo por última vez, me encontré con esta pregunta. La mejor forma que he encontrado de esto es usar el objetivo BeforeBuild en el archivo .csproj.
<Target Name="BeforeBuild">
<ItemGroup>
<Content Include="**\*.less" />
</ItemGroup>
</Target>
VS 2010 no va a tocar esta sección, y se asegura de que los archivos se incluyen como contenido cada vez que se genere el proyecto.
¿Cuál es el significado de .less? ¿Y qué significa toda la cadena '** \ *. Less'? –
. Los archivos .less son archivos CSS destinados a ser analizados por el preprocesador Menos CSS. Google "punto menos" para más información sobre eso. La expresión '** \ *. Less' significa que incluye todos los archivos * .less en todos los directorios. En MSBUILD hablar, ** significa 'todos los directorios recursivamente' – Chris
¿Esto agregará los elementos al Explorador de soluciones en Visual Studio (específicamente 2012)? – jacobappleton
Que yo sepa; sin embargo, mi sugerencia es pegarlos en el proyecto, ya que esto los incluirá por defecto. Por lo tanto, en lugar de pegarlos en el directorio a través de Explorer, use Visual Studio para pegar los archivos en las carpetas.
Simplemente puede ampliar el archivo .csproj de su sitio web. Sólo tiene que añadir su carpeta raíz de contenido con un comodín recursiva:
...
<ItemGroup>
<!-- your normal project content -->
<Content Include="Default.aspx" />
<!-- your static content you like to publish -->
<Content Include="Images\**\*.*" />
</ItemGroup>
...
Si lo hace, hace que esta carpeta y todo su contenido a continuación visible dentro de su navegador solución.
Si intenta ocultar la carpeta dentro del navegador solución especificando
<Content Include="Images\**.*.*">
<Visible>false</Visible>
</Content>
no será publicada.
actualización
Como ya descubrió el comodín será reemplazado tan pronto como se toca la carpeta dentro de su solución porque los proyectos de VS no están diseñados para contener contenido arbitrario.
Por lo tanto, deberá asegurarse de que la carpeta y su contenido nunca se modifiquen desde VS; agregar o eliminar archivos solo se puede hacer en el sistema de archivos ... que es lo que quería, ya que entendí su pregunta.
Sería más fácil si la carpeta pudiera estar oculta en VS pero no pude encontrar una manera de ocultarla Y publicarla.
Otro enfoque fallido fue incluir la carpeta en una tarea CreateItem
. Esto dio como resultado que el contenido de la carpeta se publicó en \ bin \ app.publish \ ... y no se pudo convencer de publicarlo junto con los elementos de contenido dentro de .csproj, así que no lo presenté en mi respuesta.
Funciona hasta que agregue o elimine el archivo manualmente. Después de esa línea
@Marko es correcto. Después de agregar '
Pegue este código en un archivo .proj por separado y llámelo desde el destino de compilación anterior en el archivo .csproj. –
Puede añadir archivos con enlaces de este tipo, que se pueden buscar, vista-poder, pero no la salida si intenta cambiarlas, también deja el estudio visual de los comodines en su lugar:
<ItemGroup>
<Content Include="..\Database Schema\Views\*.sql">
<Link>Views\*.sql</Link>
</Content>
</ItemGroup>
Este entra dentro del archivo .proj
Intenté esto y VS reemplaza el comodín con los archivos individuales cuando agrego o elimino un archivo usando VS. –
Esto es muy elegante, pero debe eliminar el comodín del enlace objetivo – SimSimY
Puede utilizar el método System.IO.Directory.GetFile(string)
de la infraestructura y sus sobrecargas para incluir recursivamente todos los archivos.
<ItemGroup>
<Content Include="$([System.IO.Directory]::GetFiles('$(ProjectDir)Scripts\', '*.js', SearchOption.AllDirectories))" />
<Content Include="$([System.IO.Directory]::GetFiles('$(ProjectDir)Images\', '*.png', SearchOption.AllDirectories))" />
</ItemGroup>
Esto fue de gran ayuda para mí; Tengo varios directorios con algunos niveles de profundidad y muchos archivos que quería incluir automáticamente y esto convirtió todos esos contenidos en uno. ¡Gracias! –
He experimentado con esto un poco más y resulta que tiene todas las mismas limitaciones que 'Include =" ** \ *. Ext "' con comodines. –
he escrito hasta la forma en que era capaz de conseguir el contenido incluye creada con un pequeño script de PowerShell:
$folders = Get-ChildItem .\ -r -Directory
$filtered = $folders |Select-Object @{Name='FullName';Expression={$_.fullname.replace($pwd,'')}}, @{Name='FolderDepth';Expression={($_.fullname.Split('\').Count) - ($Pwd.Path.split('\').count)}} | Sort-Object -Descending FullName,folderDepth
$basefolders = $filtered | Where-Object{$_.folderdepth -eq 1}
$basefoldersobj = @()
foreach($basefolder in $basefolders)
{
$basefoldername =$baseFolder.fullname
$filteredbase = $filtered -match "\$basefoldername\\" | Sort-Object -Descending FolderDepth | Select-Object -first 1
if($filteredbase -eq $null)
{
$filteredbase = $filtered -match "\$basefoldername" | Sort-Object -Descending FolderDepth | Select-Object -first 1
}
$obj = New-Object psobject
Add-Member -InputObject $obj -MemberType NoteProperty -Name 'Folder' -Value $basefolder.fullname.trim('\')
Add-member -InputObject $obj -MemberType NoteProperty -Name 'DeepestPath' -Value $filteredbase.folderDepth
$basefoldersobj += $obj
}
$include = '*.*'
foreach($bfolderObj in $basefoldersobj)
{
$includecount = ''
$includecount = "\$include" * ($bfolderObj.Deepestpath)
Write-Output "<content Include=`"$($bfolderObj.folder)$includecount`" /> "
}
Esto debería producir la necesaria instrucción de inclusión en el powershell pronta
Me di cuenta de que la mejor solución para esto es agregar archivos manualmente, uno por uno. Si tienes cientos de ellos como yo lo hice, fue cuestión de pocas horas. Es curioso que incluso en 2016 con VS 2015 este grave problema aún no se resuelve. Ahh, cómo me encanta Xcode.
Para aquellos que tienen problemas para usar Chris' answer, esta es la solución para Visual Studio 2012 y posteriores:
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
como Chris mencionó en su respuesta - Visual Studio voluntad no toque esta sección <Target>
, incluso si violín de forma manual (agregar/eliminar archivos) con el directorio de destino.
Tenga en cuenta que debe incluir un subdirectorio donde se encuentran los archivos (en el caso anterior, es images
). Visual Studio/MSBuild colocará esos archivos en el mismo directorio dentro de la estructura del proyecto. Si no utiliza un subdirectorio, los archivos se colocarán en la raíz de la estructura del proyecto.
Para una explicación rápida de los comodines:
**
significa todo de forma recursiva (archivos, subdirectorios y archivos dentro de los)*.ext
incluirá todos los archivos con la extensiónext
dentro del más alto nivel directorios, subdirectorios, pero no- Por ejemplo, podría ser
*.ext
*.png
,*.js
, etc. Cualquier extensión archivo funcionará
- Por ejemplo, podría ser
**\*.ext
incluirá todos los archivos con la extensiónext
desde el directorio de nivel superior y todos los subdirectorios.- Consulte la respuesta en How do I use Nant/Ant naming patterns? para obtener una explicación más completa con ejemplos.
Para finalizar, tenga en cuenta que hay una diferencia entre el uso de <Target>
y no usarlo.
Con el enfoque <Target>
, Visual Studio no mostrará los archivos dentro del Explorador de soluciones.
<Target Name="ContentsBeforeBuild" AfterTargets="BeforeBuild">
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
</Target>
El <Target>
enfoque no se instruir a Visual Studio para muestran los archivos dentro del Explorador de soluciones.El inconveniente de esto es que cualquier manipulación de los directorios automáticos hará que Visual Studio anule la entrada del comodín. También se debe tener en cuenta que el siguiente enfoque será solo actualice Solution Explorer al abrir la Solución/Proyecto en VS. Incluso el botón de barra de herramientas "actualizar" de Solution Explorer no lo hará.
<ItemGroup>
<Content Include="images\**" />
</ItemGroup>
- 1. ¿Cómo guardar automáticamente el archivo del proyecto después de incluir un nuevo archivo en Visual Studio?
- 2. Cómo incluir archivos .obj en el proyecto
- 3. Incluir archivos .css en asp.net
- 4. ¿Hay alguna manera de anular automáticamente ToString() en una clase?
- 5. ¿Hay alguna manera de incluir automáticamente la salida de la consola con el registro de bloqueo en ios
- 6. XNA Proyecto de instalación de Windows sin incluir mi proyecto de contenido
- 7. ¿Hay alguna manera de usar Thickbox con contenido dinámico?
- 8. ¿Cómo incluir jQuery en el proyecto ASP.Net?
- 9. ¿Hay alguna manera de mostrar contenido HTML dentro de Flash?
- 10. ¿Hay alguna manera de "enredar" dos archivos en Subversion?
- 11. ¿Hay alguna manera de ingresar automáticamente al ejecutar un shell?
- 12. Cómo incluir archivos jar en el proyecto de biblioteca Android
- 13. ¿Hay alguna manera de deshabilitar ReSharper para un archivo específico?
- 14. ¿Hay alguna manera de crear un "archivo de proyecto" en Emacs?
- 15. ¿Hay alguna manera de determinar automáticamente las dependencias al configurar un archivo de control dpkg?
- 16. php includes ¿hay alguna manera de incluir un archivo relativo solo a ese documento?
- 17. ¿Hay alguna manera de combinar archivos PDF en pdf.js?
- 18. ¿Hay alguna manera de incluir Javascript externo como fuente de Jasmine?
- 19. ¿Hay alguna manera de generar métricas para un proyecto github?
- 20. ASP.NET/VS2010 Búsqueda de archivos no utilizados en el proyecto
- 21. ¿Hay alguna manera de marcar el código en un proyecto de Visual Studio?
- 22. ¿Hay alguna manera de tener contenido de un desbordamiento de IFRAME en el marco principal?
- 23. ¿Hay alguna manera de establecer el orden de las pestañas en ASP.net?
- 24. ASP.NET MVC: ¿hay alguna manera de simular un ViewState?
- 25. ¿Hay alguna manera fácil de borrar un formulario ASP.NET?
- 26. ¿Hay alguna manera de generar automáticamente los archivos resx correspondientes para la localización de cadenas en .NET?
- 27. ¿hay alguna manera de ver el contenido real de un enlace simbólico?
- 28. ¿Hay alguna manera de incluir comas en columnas CSV sin romper el formato?
- 29. ¿Hay alguna manera de configurar los recursos vinculados en relación con el archivo .project?
- 30. Incluir automáticamente todos los archivos .cpp/.h de una carpeta en un proyecto de vcproj en Visual Studio
ver: esto puede ayudarle a http://stackoverflow.com/questions/1743432/how-can-i-automatically-add-existing-items-to-a-visual-studio-project/1756240 – Saar
no es exactamente lo que estoy buscando – Marko
Actualicé mi respuesta sobre su problema al modificar la carpeta dentro de su buscador de soluciones vs. – Filburt