2012-01-15 11 views
23

IssueProblema La construcción de un solo proyecto usando msbuild que tiene varias configuraciones

Estamos utilizando config transforma dentro de nuestra solución. Por ejemplo: Debug, Test, Staging, Release Sin embargo, esas configuraciones solo se usan en nuestros proyectos MVC. todas las bibliotecas solo usan Debug and Release, lo que tiene más sentido, porque nuestras bibliotecas solo necesitan estar integradas en el modo de depuración o en el modo de lanzamiento.

El problema surge cuando se intenta construir un solo proyecto desde la línea de comandos. Necesito poder hacer esto para implementar automáticamente nuestras compilaciones desde TeamCity a nuestro entorno de prueba.

Cuando construyo el proyecto solo como esto

msbuild myproject.csproj 
/t:Build 
/P:Configuration=Test 
/P:Platform=AnyCPU 
/P:DeployOnBuild=True 
/P:DeployTarget=MSDeployPublish 
/P:MsDeployServiceUrl=https://SERVER:8172/MsDeploy.axd 
/P:AllowUntrustedCertificate=True 
/P:MSDeployPublishMethod=WMSvc 
/P:CreatePackageOnPublish=True 
/P:UserName=Username 
/P:Password=Passsword 
/P:DeployIisAppPath="IISAPPPATH" 

me sale el siguiente error

 
myproject.csproj" (Build target) (1) -> 
"C:\src\myproject.csproj" (default target) (18) -> 
    c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(483,9) 
: error : The OutputPath property is not set for project 'sampleLibrary.csproj'. 
Please check to make sure that you have specified a valid combination of 
Configuration and Platform for this project. Configuration='Test' 
    Platform='AnyCPU'. You may be seeing this message because you are trying 
to build a project without a solution file, and have specified a 
non-default Configuration or Platform that doesn't exist for this project. 

Yo sé lo que significa, porque mi sampleLibrary no tiene una configuración para la prueba, y el mapeo para el sampleLibrary estaría en mi archivo .sln

Pregunta

¿Hay una manera de resolver esto sin tener que añadir aquellas configuraciones para cada proyecto de la biblioteca? Huele como un feo truco aquí.

+0

No estoy seguro si esto se refiere específicamente al problema que está teniendo pero puede obtener información útil de mi publicación SO [aquí] (http://stackoverflow.com/q/8334475/132599). –

Respuesta

5

Por desgracia, tendrá que modificar cada proyecto que se utiliza en la solución para tener la misma ruta de compilación.

Sin embargo, esto es una cosa muy fácil de hacer si todos sus proyectos se acumulan en la misma ruta independientemente de la configuración: en la pestaña de las propiedades del proyecto Build, seleccionar All Configurations del Configuration desplegable y luego cambiar el Output path.

Esto creará entradas para todas las configuraciones en el archivo de proyecto que aún no existente y establecer la misma ruta de salida para todas las configuraciones.

2

Una solución sencilla sería añadir una nueva propiedad a sus proyectos llamados "DeploymentConfiguration" y tienen que hacer el mapeo entre configuraciones. Ejemplo:

<!-- this is your non-deployment DLL --> 
    <!-- Default DeploymentConfiguration to 'Debug' --> 
<DeploymentConfiguration Condition="'$(DeploymentConfiguration)'==''">Debug</DeploymentConfiguartion> 
<Configuration Condition='$(DeploymentConfiguration)'=='Test'">Debug</Configuration> 

Luego, en su invocación de MSBuild, pase en

/p:DeploymentConfiguration=Test 

En la implementación MVC usted acaba de asignar DeploymentConfiguration a través de la configuración directamente.

2

Deja una condición OR para los diferentes valores de estreno de tantas configuraciones diferentes que tiene.

por ejemplo.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' Or '$(Configuration)|$(Platform)' == 'Test|AnyCPU'"> 
    <DebugType>pdbonly</DebugType> 
    <Optimize>true</Optimize> 
    <OutputPath>bin\Release\</OutputPath> 
    <DefineConstants>TRACE</DefineConstants> 
    <ErrorReport>prompt</ErrorReport> 
    <WarningLevel>4</WarningLevel> 
    </PropertyGroup> 
8

Would poniendo el interruptor/propiedad /p:OutputPath=Test trabajo para usted? Daría salida a las dlls en un directorio llamado Test (Imagina que también podrías usar las variables de TeamCity). Enlace a la pregunta similar/contestar https://stackoverflow.com/a/1083362/90033

+1

Muchas gracias por esto. Agregué/p: OutputPath = \ bin y funcionó. – user1325696

2

Usando los TFS línea Tengo el mismo error, que esto esté arreglado mi problema

enter image description here

Cuestiones relacionadas