2010-12-13 5 views
8

Me gustaría enfocar tanto .NET 3.5 como .NET 4.0 en mi solución de Visual Studio 2010.Versión específica de .NET Framework en Visual Studio 2010 Solución nivel

Soy consciente de que puedo configurar el <TargetFrameworkVersion /> en mis archivos de proyecto, sin embargo, esto requiere que edite cada archivo de proyecto antes de compilar la solución para una versión específica de .NET Framework. Scott Dorman proporciona una macro que hace el truco en su publicación de blog Visual Studio 2010 and Target Framework Version.

Estoy buscando una solución global donde no tenga que cambiar la configuración en cada proyecto. ¿Es posible cambiar una configuración central en el nivel de solución para lograr lo mismo?

Respuesta

18

Como escribió Jon Skeet, no hay una forma evidente de definir el marco de destino en el nivel de la solución. Sin embargo, esto se puede hacer agregando configuraciones específicas de a la solución, luego editando los archivos *.csproj manualmente para especificar los objetivos para cada configuración, en lugar de globalmente para todo el proyecto.

Aquí es una guía paso a paso:

  1. Seleccionar Construir - Administrador de configuración.
  2. En la lista desplegable Configuración de soluciones activas , seleccione y escriba un nombre descriptivo (por ejemplo, Debug v3.5) basadas en la configuración existente que ya tiene.
  3. Para cada archivo de proyecto, abrirlo en el editor (se puede hacer esto en Visual Studio, pero hay que primero haga clic en él en el Explorador de soluciones y seleccione Unload Proyecto, entonces Editar xyz.csproj)
  4. Busque el elemento <PropertyGroup> que coincida con la configuración que acaba de crear (por ejemplo Debug v3.5|AnyCPU).
  5. Agregue el XML, por ejemplo, después del elemento de cierre </PlatformTarget>, <TargetFrameworkVersion> y <TargetFrameworkProfile> que necesita.
  6. Guarde el archivo.
  7. En el Explorador de soluciones, use el comando Recargue el proyecto para que el proyecto vuelva a estar disponible.

Este es un ejemplo:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug v3.5|AnyCPU'"> 
    <DebugSymbols>true</DebugSymbols> 
    <OutputPath>bin\Debug v3.5\</OutputPath> 
    <DefineConstants>DEBUG;TRACE;DOTNET35</DefineConstants> 
    ... 
    <DebugType>full</DebugType> 
    <PlatformTarget>x86</PlatformTarget> 
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> 
    <TargetFrameworkProfile>Client</TargetFrameworkProfile> 
    ... 
</PropertyGroup> 

Nota que también definen el símbolo DOTNET35, lo que me permite escribir dependientes #if declaraciones del marco en el código fuente. Tenía, por ejemplo, algunas piezas de código que se basaban en System.Tuple y al agregar una versión minimalista de la clase, podía realizar una copia de seguridad de mi aplicación .NET 4.0 en .NET 3.5.

Aquí es mi fragmento:

#if DOTNET35 
namespace System 
{ 
    public class Tuple<T1, T2> 
    { 
     public Tuple(T1 item1, T2 item2) 
     { 
      this.item1 = item1; 
      this.item2 = item2; 
     } 

     public T1 Item1 
     { 
      get 
      { 
       return this.item1; 
      } 
     } 

     public T2 Item2 
     { 
      get 
      { 
       return this.item2; 
      } 
     } 

     private readonly T1 item1; 
     private readonly T2 item2; 
    } 
} 
#endif 
+0

+1: Gran respuesta. Me ayudó muchísimo. A propósito, también tenía algunos códigos que se basaban en 'System.Tuple'. –

+2

VS 2012 no parece muy contento con esto – leonbloy

6

No es que yo sepa.

Tenga en cuenta que un proyecto puede ser parte de múltiples soluciones, o puede construirse independientemente de cualquier solución. Por lo tanto, todo lo que una opción de "nivel de solución" realmente podría hacer sería establecer el valor predeterminado al crear un nuevo proyecto.

Si edita manualmente los archivos del proyecto, I crea debería ser capaz de crear un solo archivo de proyecto con configuraciones para .NET 3.5 y .NET 4. (Ciertamente lo hice para .NET 2 y .NET 3.5 antes de ahora). Entonces podría tener diferentes configuraciones a nivel de solución que se dirijan a las configuraciones relevantes del nivel del proyecto.

+0

Tienes razón, yo debería ser capaz de añadir ' v3.5' y ' Cliente' directamente en los elementos condicionales ''. Estaba buscando una forma interactiva de hacerlo, pero parece que VS2010 no muestra esta configuración por configuración. –

Cuestiones relacionadas