2011-09-16 17 views
5

De acuerdo con this debería ser posible hacer referencia a proyectos fuera de la solución y hacer que funcione en VS y línea de comandos pero no en TFS.Proyecto de solución externa de referencias en VS2010

Desafortunadamente, cuando intenté dividir mi solución de esta manera, no funcionó ni en VS2010/devenv ni en msbuild.

En ambos casos, el error fue:

La propiedad OutputPath no está configurado para el proyecto 'Common.csproj'. Compruebe que ha especificado una combinación válida de configuración y plataforma para este proyecto. Configuración = 'Depurar' Plataforma = 'AnyCPU'. Este error también puede aparecer si algún otro proyecto está intentando seguir una referencia de proyecto a proyecto a este proyecto, este proyecto ha sido descargado o no está incluido en la solución, y el proyecto de referencia no se genera utilizando el mismo o una configuración o plataforma equivalente .

Sin embargo, la plataforma actual es "x86" y no importa qué plataforma y configuración configuro en VS o msbuild siempre está intentando Debug|AnyCPU. En el caso de msbuild si configuro /p:OutputPath=bin\x86\Debug, se propaga a proyectos secundarios correctamente.

¿Esto es un error, puedo solucionarlo?

ACTUALIZACIÓN

encontró el bug in MS Connect. Desafortunadamente cerrado como no van a resolver :(

ACTUALIZACIÓN 2

solución Encontrado: set ShouldUnsetParentConfigurationAndPlatform=false Tanto en la línea de comandos para msbuild y en el archivo de proyecto (antes de cualquier importación) para fijar Visual Studio

Respuesta

0
..

Si entiendo el problema correctamente, en realidad es porque el objetivo AssignProjectConfiguration no está configurando correctamente las propiedades de configuración/plataforma para esos proyectos.

Si sabe cuáles deberían ser sus configuraciones y plataformas, podría formas simplemente inyecte un objetivo para ejecutar justo después del objetivo AssignProjectConfiguration y anule las propiedades SetConfiguration y SetPlatform en cada elemento que representa una referencia entre proyectos no resuelta (es decir, que no forma parte de la configuración de la solución).

Por alguna estúpida razón, el objetivo proporcionado por Microsoft almacena la lista de referencias no resueltas del proyecto en la misma colección como los resueltos unos (pero en ninguna otra), lo que le deja con 2 opciones:

  1. acaba de establecer las propiedades de cada proyecto de forma manual (es decir, codificación rígida a través de un elemento ItemGroup dinámico dentro de su objetivo inyectado).
  2. Llame la tarea AssignProjectConfiguration usted mismo desde su destino inyectado, recopile las salidas no asignadas para asignarles una configuración/plataforma predeterminada de su elección.

De cualquier manera, una vez que tenga su lista de obras de referencia configurados correctamente, sólo tiene que sustituir los elementos no resueltos en el grupo de artículos ProjectReferenceWithConfiguration con sus homólogos modificados manualmente (usando otro elemento ItemGroup dinámico con un quite y vuelva a un include)

Ten en cuenta que no haría las cosas de la forma en que las estás haciendo. Si quiere dividir su producto en varias soluciones, simplemente haría que cada solución publique salidas compartidas en un área común de preparación y tenga scripts .proj para unirlas. Aprendí por las malas que MSBuild al estilo de línea de comandos y MSBuild al estilo VS no se mezclan (han hecho algunos compromisos extraños para garantizar la interoperabilidad con sistemas de proyectos que no son MSBuild, de los cuales todo AssignProjectConfiguration-with-VS -provided-solution-config-XML process is one).

+0

Marcado como respuesta, aunque he optado por una solución diferente. –

0

Encontré algo similar en VS2012. Para mí, estaba relacionado con la propiedad ShouldUnsetParentConfigurationAndPlatform del objetivo AssignProjectConfiguration establecido en true durante la compilación. Esto dio como resultado "GlobalPropertiesToRemove = Configuration; Platform" que causaba que las propiedades de configuración y plataforma se borraran para la referencia del proyecto.

Pude ver esto ocurriendo buscando en la ventana Generar salida después de configurar Herramientas -> Opciones -> Proyectos y soluciones -> Construir y ejecutar -> MSBuild project build output verbosity -> Diagnostic.

con una configuración/Plataforma en blanco, esto provocó la siguiente línea en algunos de mis proyectos a la altura, resultando en asambleas de depuración en la salida del proyecto, incluso en una versión de lanzamiento:

<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 

La solución fue modificar esos archivos csproj para especificar Release como la configuración a usar cuando la variable de configuración estaba vacía/en blanco:

<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration> 
Cuestiones relacionadas