2011-04-26 11 views
14

Estoy tratando de eliminar la carpeta App_Start de mi proyecto durante la instalación de mi paquete NuGet. La documentación para NuGet aquí:Eliminar carpeta y archivos del proyecto usando NuGet/Powershell

http://nuget.codeplex.com/wikipage?title=Creating%20a%20Package

dice:

$ project.Object es el equivalente de http://msdn.microsoft.com/en-us/library/ms170626.aspx.

lo que no soy capaz de encontrar mucha información de esa interfaz que es de mucha ayuda para mí.

Tengo el siguiente script de PowerShell, que elimina con éxito la carpeta y archivos:

param($installPath, $toolsPath, $package, $project) 

$DirInfo = New-Object System.IO.DirectoryInfo($installPath) 
$appDir = New-Object System.IO.DirectoryInfo($DirInfo.Parent.Parent.FullName) 
$fullPath = [IO.Path]::Combine($appDir.FullName, $appDir.Name, "App_start") 
Remove-Item $fullPath -recurse 

(Sé que el encauzamiento aquí no está garantizado, pero este paquete es sólo para uso interno)

Pero el proyecto todavía tiene una referencia a los elementos y, por lo tanto, los elementos aparecen con la advertencia amarilla porque Visual Studio cree que los elementos son parte del proyecto.

Lo que necesito es una forma de eliminar programáticamente una referencia a esos elementos del proyecto. ¿Algunas ideas?

Respuesta

15

bien, estoy absolutamente seguro de que hay una manera mejor que esto, pero nunca he utilizado NuGet o Powershell hasta hoy ...:/

Me acabo de encontrar esto en mi consola Administrador de paquetes:

$DTE.Solution.Projects | ForEach { $_.ProjectItems | ForEach { if ($_.Name -eq "Controllers") { $_.Remove() } } } 

Pasó por todos los elementos de los proyectos en busca de un elemento de nivel superior llamado "Controladores" y luego lo quitó del proyecto. Seguro que puedes cambiar esto a "App_Code".

Editar: amigo mío (que sabe un poco más que yo Powershell) envió esto:

$DTE.Solution.Projects|Select-Object -Expand ProjectItems|Where-Object{$_.Name -eq 'Controllers'}|ForEach-Object{$_.Remove()} 
+0

En PowerShell, cuando se tiene '... | foreach {$ _. Foo | % {...}} 'generalmente puede escribir' ... | foreach {$ _. Foo} | % {...} '- no tienes que anidar el' foreach's. –

+0

Sí, era bastante nuevo en PoSh cuando escribí esto. Funciona, pero probablemente puede hacerse mucho más legible = D –

+1

No sabía que podía navegar por la solución directamente en la consola PM a través de los comandos $ DTE.Solution.xyz. ¡Gracias, esto aceleró mi trabajo! –

Cuestiones relacionadas