visual studio - sp1 - ¿Existe tal cosa como un "proyecto de solo datos/contenido" en el estudio visual?
visual studio 2010 (5)
Andy publicó un link con una solución que en su mayoría me funcionó; Básicamente borre la siguiente línea del archivo de proyecto:
<Import Project="$(MSBuildToolsPath)/Microsoft.CSharp.targets" />
Y añada las siguientes líneas:
<Target Name="Build">
<Copy
SourceFiles="@(Content)"
DestinationFiles="@(Content->''$(OutputPath)%(RelativeDir)%(Filename)%(Extension)'')" />
</Target>
<Target Name="Clean">
<Exec Command="rd /s /q $(OutputPath)" Condition="Exists($(OutputPath))" />
</Target>
<Target Name="Rebuild" DependsOnTargets="Clean;Build">
</Target>
También encontré que deshabilitar la propiedad de depuración del proyecto "Habilitar el proceso de alojamiento de Visual Studio" (para cada configuración) impidió que se generara el archivo MyProject.vshost.exe .
Como señaló David I. McIntosh en un comentario sobre esta respuesta , si su proyecto es parte de una solución con múltiples proyectos y cualquier otro proyecto utiliza la misma ruta de salida que el proyecto de contenido único, el objetivo Clean
anterior eliminará todos los archivos en la ruta de salida, es decir, la salida de compilación de otros proyectos, y, por lo tanto, solo serían correctos si el proyecto de solo contenido es el primer proyecto creado (entre los que comparten la misma ruta de salida de compilación). El siguiente es un objetivo de Clean
más seguro y amigable para este escenario:
<Target Name="Clean">
<Delete Files="@(Content->''$(OutputPath)%(RelativeDir)%(Filename)%(Extension)'')"/>
</Target>
Tengo un montón de archivos XML y XSLT auxiliares que quiero editar y administrar en Visual Studio.
Los archivos no pertenecen lógicamente a ningún proyecto de código en mi solución y, por lo tanto, para agruparlos ordenadamente, he creado un proyecto "dummy" de C # dll en Visual Studio y lo deshabilité para compilar en las versiones de Debug / release.
Me pregunté si habría una mejor manera de lograr el mismo resultado (es decir, tener todos los archivos visibles en el explorador de soluciones). Lo que creo que realmente quiero es un proyecto de estudio visual de "solo contenido" pero tal cosa no existe (¿o no he buscado lo suficiente?).
He jugado con la idea de agregar los archivos como elementos de la solución, pero luego parecen más difíciles de administrar porque la creación de una nueva "carpeta de elementos de la solución" en realidad no crea una carpeta en el disco.
¿Alguien tiene alguna idea?
Esta respuesta es solo una consolidación conveniente de las respuestas anteriores dadas por Chris Fewtrell y Kenny Evitt, junto con la ligera modificación en mis comentarios anteriores, y un poco más de detalles sobre cómo debería ser la declaración de los elementos de contenido:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" ''$(Configuration)'' == '''' ">Debug</Configuration>
<Platform Condition=" ''$(Platform)'' == '''' ">AnyCPU</Platform>
<ProjectGuid>{541463A7-7CFA-4F62-B839-6367178B16BD}</ProjectGuid>
</PropertyGroup>
<PropertyGroup Condition="''$(Configuration)|$(Platform)'' == ''64-bit|AnyCPU''">
<PlatformTarget>x64</PlatformTarget>
<OutputPath>../builds/$(Configuration)/</OutputPath>
<IntermediateOutputPath>../builds/$(Configuration)/Intermediate/YourProjectName/</IntermediateOutputPath>
</PropertyGroup>
<ItemGroup>
<Content Include="fileInProjectFolder.csv" />
<Content Include="SubDir/fileInSubdir.txt" />
<Content Include="../actualSourceDirectoryOfFile/app.log.basic.config">
<Link>targetSubdirInOutputDir/app.log.basic.config</Link>
</Content>
<Content Include="../actualSourceDirectoryOfFile/yetAnotherFile.config">
<Link>yetAnotherFile.config</Link>
</Content>
... more files ...
</ItemGroup>
<Target Name="Build">
<Copy
SourceFiles="@(Content)"
DestinationFiles="@(Content->''$(OutputPath)%(RelativeDir)%(Filename)%(Extension)'')" />
</Target>
<Target Name="Clean">
<Delete Files="@(Content->''$(OutputPath)%(RelativeDir)%(Filename)%(Extension)'')"/>
</Target>
<Target Name="Rebuild" DependsOnTargets="Clean;Build">
</Target>
</Project>
Tenga en cuenta que esto siempre copia todos los archivos de "contenido" en el directorio de salida: las opciones "Copiar si es más reciente", "Copiar siempre" y "No copiar", como se presenta en la GUI del estudio visual (aparece como, por ejemplo, <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
en el archivo .csproj) se ignoran.
Luego, intente crear una Blank solution
. Crear Empty project
. Tenga sus archivos en las carpetas respectivas en la carpeta de soluciones. Desde la ventana de propiedades, use Show all files
, incluya esas carpetas en el proyecto. No hay otra solución mejor que esta. Espero.
Un compañero de trabajo ha encontrado una solución.
Él ha sugerido editar manualmente el proyecto para eliminar los DefaultTargets
del proyecto (y eliminar una carga de las propiedades no utilizadas ahora).
MSBuild se queja si no hay objetivos en el proyecto, por lo que ha agregado tres objetivos vacíos.
El proyecto final se ve algo así.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" ''$(Configuration)'' == '''' ">Debug</Configuration>
<Platform Condition=" ''$(Platform)'' == '''' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{541463A7-7CFA-4F62-B839-6367178B16BD}</ProjectGuid>
</PropertyGroup>
<ItemGroup>
... files ...
</ItemGroup>
<ItemGroup>
... files ...
</ItemGroup>
<Target Name="Build"/>
<Target Name="Rebuild"/>
<Target Name="Clean"/>
</Project>
Es cierto que esta solución requiere más manipulación que me hubiera gustado pero parece lograr lo que estaba buscando: un proyecto que no intenta producir ningún resultado de compilación.