2011-06-29 21 views
26

Tenemos varios productos aquí que comparten algunas bibliotecas comunes. Estas bibliotecas son parte de una solución separada (para que puedan ser construidas por TFS de forma independiente), pero el problema es durante el desarrollo, uno tiene que modificar la biblioteca común, compilarla en binario, copiarla en la ubicación común, compilar la solución del producto .visual studio 2010 referencias condicionales

Para evitar esto en realidad, me pregunto si es posible tener referencias condicionales, por lo que para una configuración de depuración, los referenciaría como referencias de proyecto, mientras que en la configuración de lanzamiento serían referencias binarias.

+1

No hay buena manera que yo sepa; en el pasado he usado soluciones múltiples ... una solución "maestra" que hace referencia a todo si está haciendo cambios arquitectónicos importantes, y luego separa soluciones de proyectos si solo está trabajando en un proyecto individual. En general, un PITA. –

+0

Puede hacerlo modificando manualmente el archivo '.csproj'. – SLaks

+0

Puedes hacer esto modificando tu proceso de construcción. Use una herramienta como MsBuild. –

Respuesta

39

Debería poder hacer esto con construcciones condicionales editando directamente el archivo del proyecto (VS IDE no lo hará por usted).

Por ejemplo, usted podría hacer algo como esto usando el elemento "Seleccionar":

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" > 
    <PropertyGroup> 
     <!-- ... --> 
    </PropertyGroup> 
    <Choose> 

     <When Condition=" '$(Configuration)'=='Debug' "> 
      <ItemGroup> 
       <ProjectReference Include="..\stuff\MyStuff.csproj"> 
        <Project>{4c7bbe47-8d84-45d4-95f0-f640ba59563c}</Project> 
        <Name>MyStuff</Name> 
       </ProjectReference> 
      </ItemGroup> 
     </When> 

     <When Condition=" '$(Configuration)'=='Retail' "> 
      <ItemGroup> 
       <Reference Include="MyStuff.dll" /> 
      </ItemGroup> 
     </When> 

    </Choose> 
    <!-- Rest of Project --> 
</Project> 

MSDN tiene more information about using conditional constructs.

+0

¿Estos proyectos también tienen que ser parte de la solución? –

+0

Creo que sí, pero en el caso de "liberación" todavía debería estar bien. Deben aparecer como no encontrados, lo que no importaría porque en la versión de lanzamiento no se hace referencia a ellos. – Matt

4

Es posible que desee echar un vistazo a NuGet:

NuGet

NuGet es un desarrollador de código abierto sistema de gestión de paquetes centrado libre para la intención plataforma .NET en la simplificación del proceso de incorporar bibliotecas de terceros en una aplicación .NET durante el desarrollo.

(en la que sería la tercera parte a sí mismo en este caso)

Nota: Esto no le daría referencias condicionales, pero aliviaría la actualización de los componentes comunes.