2008-11-05 10 views
5

Tengo una situación donde quiero copiar el ensamblaje de salida de un proyecto en el directorio de salida de mi aplicación de destino usando MSBuild, sin rutas de codificación en mi MSBuild Copiar tarea Este es el escenario:Copia de MSBuild salida de otro proyecto a la salida del proyecto actual

  • Proyecto A - Proyecto de Aplicación Web
  • Proyecto B - Proyecto de interfaz Dal
  • Proyecto C - Dal Implementación del Proyecto

Hay una capa de negocios también, pero no tiene relevancia para el problema de MSBuild que estoy buscando resolver.

Mi capa empresarial hace referencia a mi proyecto Dal.Interface. Mi proyecto web tiene una referencia a la capa Business y, tal como está, realizar una construcción hará que la capa empresarial y los proyectos Dal.Interface entren en la salida. Hasta aquí todo bien. Ahora, para que la aplicación web se ejecute, necesita la implementación de Dal. No quiero que se haga referencia a la implementación en cualquier lugar porque quiero aplicar codificación a la interfaz y no tener una referencia significa que no aparecerá en intellisense, etc.

Así que pensé que podría manejar esto a través de la copia MSBuild operación como una tarea AfterBuild (tengo la configuración de Implementación Dal para compilar cuando se construye el proyecto web, simplemente no se hace referencia). No quiero codificar las rutas de acceso ni ninguna otra cosa en los parámetros MSBuild, así que estoy tratando de averiguar cómo hacer referencia al resultado del proyecto Dal desde el archivo MSBuild del Proyecto de Aplicación Web.

Así que basado en los proyectos mencionados anteriormente, esto es lo que quiero que suceda:

  1. aplicación web de construcción se inició
  2. Todos los proyectos necesarios de construcción (ya configurados, por lo que esto se hace)
  3. MSBuild tarea "AfterBuild" arranca y la salida del proyecto C (Dal Implementación) se copia en el directorio bin del Proyecto a (aplicación web)

Parte 3 es donde estoy atascado.

Estoy seguro de que esto se puede hacer, solo que no encuentro una buena referencia para ayudar. Gracias de antemano por cualquier ayuda.

Respuesta

8

He hecho este trabajo, aunque me gustaría encontrar una solución más limpia que tome ventaja de los parámetros integrados dentro de MSBuild (como $ (TargetDir), etc. pero para apuntar al proyecto quiero obtener la salida para). De todos modos, esto es lo que he hecho:

<Target Name="AfterBuild"> 
<Copy SourceFiles="$(SolutionDir)MyProject.Dal.Linq\bin\$(Configuration)\MyProject.Dal.Linq.dll" DestinationFolder="$(TargetDir)"/> 
</Target> 

Me encantaría ver una solución más limpia, pero esto debería hacer por ahora.

+0

I + 1 hace esto hace siglos. Como has sugerido, esto no está limpio; obviamente, esto se rompe si el OutDir cambia, p. al construir con TeamBuild. (Solo en caso de que otros vean esto y no se den cuenta de las deficiencias). Ver también http://stackoverflow.com/questions/2325598/determining-outputs-of-a-projectreference-in-msbuild/2325620#2325620 –

+0

Ver http: // stackoverflow.com/questions/2325598/determination-outputs-of-a-projectreference-in-msbuild/2325620 # 2325620 para ver un ejemplo de una forma de abordar la inquietud que mencioné –

0

Por lo tanto, desea tener una referencia, pero no tenerla visible en VS. Por lo tanto, si lo necesita, puede compilarlo y copiarlo a la salida como cualquier otro archivo Content. Así es cómo lo haría:

<Target Name="IncludeDALImplementation" BeforeTargets="AfterBuild"> 
    <MSBuild Projects="..\DalImplementation\DAL.csproj" BuildInParallel="$(BuildInParallel)" Targets="Build"> 
    <Output TaskParameter="TargetOutputs" ItemName="DalImplementationOutput" /> 
    </MSBuild> 

    <ItemGroup> 
    <Content Include="@(DalImplementationOutput)" /> 
    </ItemGroup> 
</Target> 
+0

Recibo este error: 'La tarea de" Contenido "era no encontrado. al compilar en Visual Studio – Thorarin

+0

@Thorarin: código fijo, perdón por eso. Tenga en cuenta que todavía no se ha probado – Jonathan

+0

Hice el mismo cambio y funcionó. Necesitaba copiar las dependencias así como también el resultado del proyecto, así que tuve que cambiar mi enfoque un poco. – Thorarin

Cuestiones relacionadas