visual studio 2008 - valido - Copiar al directorio de salida copia la estructura de la carpeta, pero solo desea copiar archivos
temas para visual studio code (8)
Agregue lo siguiente a su archivo .csproj / .vbproj
<Target Name="AfterBuild">
<Copy
DestinationFolder="$(OutputPath)"
SourceFiles="@(RootContent)"
SkipUnchangedFiles="true"
/>
</Target>
A continuación, cambie la Acción de compilación de los archivos que desee en la carpeta raíz a RootContent.
Tengo un VS2008 Quiero copiar ciertos archivos de un directorio en mi carpeta /bin/
. Configuré los archivos (ubicados en /common/browserhawk/
) en "Copiar al directorio de salida". Sin embargo, también copia la estructura de la carpeta: los archivos se copian a /bin/common/browserhawk/
¿Cómo puedo obtener estos archivos para copiar a solo /bin/
? No quiero almacenarlos en la raíz del sitio web para que se copien correctamente.
Pregunta relacionada: Visual Studio agrega .dll y .pdb para proyectar después de compilar
Como no puedo comentar las respuestas anteriores, ubicaré la solución aquí:
Agregando lo que @PaulAlexander proporcionó, agregue lo siguiente a su archivo .csproj / .vbproj:
<ItemGroup>
<AvailableItemName Include="RootContent">
<Visible>false</Visible>
</AvailableItemName>
</ItemGroup>
<Target Name="AfterBuild">
<Copy
DestinationFolder="$(OutputPath)"
SourceFiles="@(RootContent)"
SkipUnchangedFiles="true"
/>
</Target>
Esto le permite seleccionar "RootContent" como la Acción de compilación en la ventana Propiedades, y se puede acceder a todos a través de la GUI. Una explicación más completa: la opción "AvailableItemName" básicamente crea una nueva lista de nombres a la que puede asignar elementos en el proyecto en la propiedad "Crear acción" en la ventana Propiedades. A continuación, puede utilizar esta lista recién creada en cualquier destino que desee (por ejemplo, a través de "@ (RootContent)").
Creo que el comando XCOPY maneja mejor los directorios y los archivos. Por lo tanto,
XCOPY "$(ProjectDir)common/browserhawk" "$(TargetDir)" /E /I /F /Y
Que permite crear carpetas fuera del directorio de destino.
XCOPY "$(ProjectDir)Templates" "$(TargetDir)" /E /I /F /Y
La estructura del archivo / carpeta del Proyecto de:
A:/TEMP/CONSOLEAPPLICATION3/TEMPLATES
├───NewFolder1
├───NewFolder2
│ TextFile1.txt
│ TextFile2.txt
└───NewFolder3
TextFile1.txt
TextFile2.txt
TextFile3.txt
Se convierte en:
A:/TEMP/CONSOLEAPPLICATION3/BIN/DEBUG
│ ConsoleApplication3.exe
│ ConsoleApplication3.pdb
│ ConsoleApplication3.vshost.exe
│ ConsoleApplication3.vshost.exe.manifest
├───NewFolder1
├───NewFolder2
│ TextFile1.txt
│ TextFile2.txt
│
└───NewFolder3
TextFile1.txt
TextFile2.txt
TextFile3.txt
Lo he usado en VS2010 y VS2015. Yo prefiero esta solución porque:
- El XML es reutilizable en cualquier proyecto
- El "RootContent" se elige como una acción de compilación en la interfaz de usuario de Visual Studio, al igual que cualquier otro "contenido"
- El "CopyToOutputDirectory" se obedece, tal como se esperaría
- RootContent se agrega a la salida del proyecto: se lleva a cabo a través de Project-References, obedece a "Clean", etc.
- RootContent se puede especificar con un comodín, conservando la estructura de la carpeta recursiva:
<RootContent Include="common/browserhawk/**"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </RootContent>
Hacia el comienzo del archivo de proyecto:
<ItemGroup>
<AvailableItemName Include="RootContent">
<!-- Add "RootContent" as a choice in the "Build Action" dropdown. -->
<Visible>False</Visible>
</AvailableItemName>
</ItemGroup>
Prestado de esta respuesta
Después de la importación de Microsoft .targets:
<PropertyGroup>
<AssignTargetPathsDependsOn>
$(AssignTargetPathsDependsOn);
IncludeRootContentAsContent;
</AssignTargetPathsDependsOn>
</PropertyGroup>
<Target Name="IncludeRootContentAsContent">
<CreateItem Include="@(RootContent)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(Extension)">
<Output ItemName="ContentWithTargetPath" TaskParameter="Include" />
</CreateItem>
</Target>
Prestado de esta respuesta
Puede agregar un evento de publicación posterior para copiar los archivos.
Vaya a las propiedades del proyecto, la ficha Crear eventos y añada lo siguiente a la línea de comandos del evento Post-build:
copy "$(ProjectDir)/common/browserhawk/*.*" "$(TargetDir)"
Asegúrese de incluir las comillas si la ruta del proyecto tiene espacios.
Puede crear un archivo por lotes para copiar los archivos y ejecutarlo como un evento posterior a la construcción.
Si edita .csproj / .vbproj en un editor de texto, puede controlar dónde se ubica el archivo en el directorio de salida y también qué nombre tendrá el archivo en el directorio de salida. Por ejemplo:
<None Include="content/someContent.txt">
<Link>someContentInOutputDirectory.txt</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Esto colocará el content/someContent.txt
del archivo content/someContent.txt
en bin/someContentInOutputDirectory.txt
. También puede elegir un subdirectorio en el bin
si lo desea; simplemente agrégalo al elemento Enlace.
Terminé agregando un paso al archivo de compilación nant para copiar después de una compilación exitosa
<target name="action.copy.browserhawk.config" depends="compile.source">
<copy todir="${App.Web.dir}/bin/" includeemptydirs="false">
<fileset basedir="${browserhawk.config.dir}">
<include name="bhawk_bb.dat" />
<include name="bhawk_sp.dat" />
<include name="browserhawk.properties" />
<include name="maindefs.bdd" />
<include name="maindefs.bdf" />
<include name="BH_PRO.lic" />
</fileset>
</copy>
<echo message="COPY BROWSERHAWK CONFIG: SUCCESS ${datetime::now()}" />
</target>