2011-09-21 25 views
7

Probablemente sea una pregunta frecuente, pero no pudimos encontrar una solución incluso después de mucha búsqueda.¿Mover elementos de compilación en msbuild a un archivo separado?

Tenemos varios archivos de msbuild que operan en el mismo conjunto de archivos fuente. (No es particularmente relevante, pero se compilan en plataformas completamente diferentes). Para que la administración de estos sea un poco más simple, nos gustaría mover los nombres de los archivos de origen <Compile> a un archivo separado y hacer referencia a eso desde todos los archivos de msbuild.

Nos trataron de cortar el <ItemGroup> que contiene los <Compile> artículos y pegándolo en un nuevo archivo, y rodeándola con

<Project DefaultTargets="Build" ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

y luego hacer referencia a ese archivo desde el original con

<Import Project="Common.files.csproj" />

pero eso no funciona - la solución se abre (con una advertencia ya que hackeamos la configuración predeterminada), bu t no aparecen elementos en el Explorador de soluciones.

¿Qué estamos haciendo mal?

+0

¿Qué ocurre si selecciona "Mostrar todos los archivos"? – mellamokb

+1

@mellamokb: eso no debería importar: Mostrar todos los archivos solo alterna mostrando qué hay en el disco. Lo intenté también solo para estar seguro. – bright

Respuesta

10

intentado con Visual Studio 2010:

1) Crea tu .proj externo (o .target) archivo y añadir sus archivos (he usado un nombre de elemento diferente, pero eso no debería importar)

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
     <ExternalCompile Include="Program.cs" /> 
     <ExternalCompile Include="Properties\AssemblyInfo.cs" /> 
    </ItemGroup> 
</Project> 

2) Importe su archivo .proj externa en la parte superior de su archivo de proyecto de Visual Studio:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="MyExternalSources.proj" /> 
    <PropertyGroup> 
    ... 

y modificar la Compile ItemGroup así:

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
</ItemGroup> 
... 

Advertencia: Vas a tener que añadir nuevos artículos/archivos a su archivo .proj externa - todos los artículos/archivos añadidos desde dentro de Visual Studio va a terminar como esto :

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
    <Compile Include="MyNewClass.cs" /> 
</ItemGroup> 
... 
+0

Excelente , eso funciona. Sí, es una pena tener que agregar elementos a mano, pero pueden agregarse como de costumbre y luego moverse al archivo externo antes de registrarse. – bright

+0

He intentado la misma técnica con pero parece que no funciona. ¿Alguien sabe de la forma de importar un conjunto de contenido 'predeterminado', p. cuando se trabaja con una aplicación web OSS compilada existente. – uniquelau

+0

@uniquelau Acabo de probar y expiré un problema cuando los archivos se encuentran fuera de la carpeta del proyecto "principal". Tan pronto como moví el contenido "estático" a la carpeta del proyecto, funcionó igual con un 'Item' Group'. Mi solución es realmente solo una solución alternativa y muestra cómo puede ajustar los archivos del proyecto VS. Tal vez una tarea personalizada posterior a la construcción podría manejar el contenido estático en movimiento en su caso. – Filburt

0

Nunca he visto archivos "incluir" trabajar con MSBuild. Obviamente, los archivos de Objetivos funcionan de esta manera, pero no he visto un archivo parcial de msbuild incluido en otro. ¿Podrías usar un método como el ilustrado en esto?
http://msdn.microsoft.com/en-us/library/ms171454(VS.80).aspx

El uso de comodines es como yo he abordado en el pasado.

+0

Gracias, pero todavía estoy esperando una solución. Esto puede ser un último recurso si todo lo demás falla, pero no es óptimo. – bright

+0

también podría usar la tarea CreateItem junto con su propio análisis de archivos personalizado para agregar elementos al Grupo de artículos de compilación durante un objetivo BeforeBuild ... http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx –

Cuestiones relacionadas