2009-10-27 16 views
5

Tengo la siguiente estructura:equipo de construcción con varios proyectos de equipo

$ 
--TeamProject1 
---Solution1.sln 
----TestProject1 
--TeamProject2 
---Solution2.sln 
----TestProject2 

En TestProject1, añado TestProject2.dll como referencia (No es una referencia de proyecto, sino una referencia de archivo). Mi pregunta es: ¿cómo construir una solución que haga referencia a ensambles pertenecientes a diferentes proyectos de equipo?

Tengo TFSBuild.proj archivo que contenga la siguiente información:

<TfCommand>$(TeamBuildRefPath)\..\tf.exe</TfCommand> 

<SolutionToBuild Include="$(BuildProjectFolderPath)/../../DEV/TeamProject1.sln"> 
    <Targets></Targets> 
    <Properties></Properties> 
</SolutionToBuild> 

<Map Include="$/TeamProject1"> 

    <LocalPath>$(SolutionRoot)</LocalPath> 

</Map> 

<Map Include="$/TeamProject2"> 

    <LocalPath>$(SolutionRoot)</LocalPath> 

</Map> 

<Target Name="BeforeGet"> 
    <DeleteWorkspaceTask TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Name="$(WorkspaceName)" /> 
    <Exec WorkingDirectory="$(SolutionRoot)" Command="&quot;$(TfCommand)&quot; workspace /new $(WorkspaceName) /server:$(TeamFoundationServerUrl)" /> 
    <Exec WorkingDirectory="$(SolutionRoot)" Command="&quot;$(TfCommand)&quot; workfold /unmap /workspace:$(WorkSpaceName) &quot;$(SolutionRoot)&quot;" /> 
    <Exec WorkingDirectory="$(SolutionRoot)" Command="&quot;$(TfCommand)&quot; workfold /map /workspace:$(WorkSpaceName) /server:$(TeamFoundationServerUrl) &quot;%(Map.Identity)&quot; &quot;%(Map.LocalPath)&quot;" /> 
    </Target> 

Gracias de antemano.

Xiaosu

Respuesta

1

yo sepa esto no es posible y será problemático en las máquinas de los desarrolladores. Las referencias de archivo es el camino a seguir. Por lo general organizar proyectos como éste:

$ 
-- TeamProject1 
    -- branches 
    -- trunk 
     Solution1.sln 
     -- lib 
     TestProject2.dll 
     -- src 
     -- test 
     TestProject1.csproj references TestProject2.dll from lib 

-- TeamProject2 
    -- branches 
    -- trunk 
     Solution2.sln 
     -- lib 
     -- src 
     -- test 
     TestProject2.csproj 

De esta manera TeamProject1 es independiente del código fuente de TeamProject2 y contiene todas las dependencias necesarias. Si TeamProject2 cambia, no será necesario romper TeamProject1.

+2

Gracias por su actualización. ¿Cómo se mantiene TestProject2.dll sincronizado? En la etapa de desarrollo, TestProject2.dll se puede cambiar todas las semanas, entonces ¿debo copiar manualmente TestProject2.dll de TeamProject2 a la carpeta de la librería TeamProject1? Gracias. – Xiaosu

4

citar el official TFS guide on CodePlex:

Si comparte fuente o binarios a través de proyectos de equipo, tiene dos opciones:

  • de ramificación. Con este enfoque, usted deriva la fuente del otro proyecto del equipo en su solución actual. Esto crea una configuración que unifica la fuente de la ubicación compartida y su proyecto en el lado del servidor.

  • Workspace Mapping. Con este enfoque, asigna la fuente del otro proyecto del equipo a un área de trabajo en su computadora de desarrollo. Esto crea una configuración que unifica la fuente del otro proyecto del equipo y su proyecto en el lado del cliente.

La ramificación es el enfoque preferido porque almacena la relación de dependencia en el servidor de control de origen. El mapeo del área de trabajo es un enfoque solo del lado del cliente, lo que significa que usted y cada desarrollador deben crear la asignación en sus propias computadoras y también en el servidor de compilación para poder construir la aplicación con éxito.

La ramificación agrega una sobrecarga de combinación adicional, pero le permite tomar la decisión de recoger binarios actualizados o de forma más explícita.

+0

+1 No sabía que esto fuera posible y realmente resuelve mi problema. –

0

Fue muy difícil encontrar la respuesta real para esto y me hizo perder mucho tiempo.Así que si alguna vez tienes este problema, aquí hay un enlace a la solución correcta

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/9918911f-5951-43be-9ee9-00214cf17400/buildvnext-and-multiple-team-projects?forum=tfsbuild

Básicamente la interfaz de usuario no le permite seleccionar el proyecto más de un equipo en su colección. Pero siempre puede escribir la ruta real a los proyectos de su otro equipo y funcionará

Cuestiones relacionadas