2012-01-15 1 views
23

EmisjiIssue Tworzenie projektu za pomocą pojedynczego msbuild, który ma wiele konfiguracji

Używamy config przekształca wewnątrz naszego rozwiązania. Na przykład: Debugowanie, testowanie, testowanie, wydanie Jednak te konfiguracje są używane tylko w naszych projektach MVC. wszystkie biblioteki używają tylko debugowania i wydania, co ma więcej sensu, ponieważ nasze biblioteki muszą być zbudowane tylko w trybie debugowania lub zwolnieniu.

Problem pojawia się podczas próby utworzenia pojedynczego projektu z wiersza poleceń. Muszę być w stanie to zrobić, aby automatycznie wdrożyć nasze kompilacje z TeamCity do naszego środowiska testowego.

Kiedy zbudować jeden projekt jak ten

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" 

I pojawia się następujący błąd

 
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. 

wiem co to znaczy, bo moja sampleLibrary nie posiada konfigurację testu, a mapowanie dla biblioteki SampleLibrary będzie zawarte w pliku .sln

Pytanie

Czy istnieje sposób rozwiązania tego problemu bez konieczności dodawania tych konfiguracji dla każdego projektu biblioteki? Pachnie tu jak brzydki hak.

+0

Nie jestem pewien, czy to specjalnie rozwiązuje problem masz posiadającą ale możesz uzyskać przydatne informacje z mojego postu SO [tutaj] (http://stackoverflow.com/q/8334475/132599). –

Odpowiedz

5

Niestety, będziesz musiał zmodyfikować każdy projekt, który jest używany w rozwiązaniu, aby mieć tę samą ścieżkę budowania.

Jednak jest to dość łatwa rzecz do zrobienia, jeśli wszystkie projekty zbudować na tej samej ścieżce, niezależnie od konfiguracji: w zakładce właściwości projektu Build wybierz All Configurations z Configuration listy rozwijanej, a następnie zmienić Output path.

Spowoduje to utworzenie wpisów dla wszystkich konfiguracji w pliku projektu, które jeszcze nie istnieją i ustawienie tej samej ścieżki wyjściowej dla wszystkich konfiguracji.

2

Jednym prostym rozwiązaniem byłoby dodanie nowej właściwości do projektów o nazwie "DeploymentConfiguration" i wykonanie mapowania między konfiguracjami. Przykład:

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

Następnie w inwokacji MSBuild, przechodzą w

/p:DeploymentConfiguration=Test 

W rozmieszczania MVC chcesz po prostu przypisać DeploymentConfiguration aż do konfiguracji bezpośrednio.

2

Ustaw warunek LUB dla różnych wartości w wersji dla dowolnej liczby różnych konfiguracji.

np.

<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

Czy ustawienie przełącznika/usługi /p:OutputPath=Test będzie działać? Wyprowadziłby biblioteki dll w katalogu o nazwie Test (chciałbym, abyś użył zmiennych TeamCity). Link do podobnego pytania/odpowiedzi https://stackoverflow.com/a/1083362/90033

+1

Wielkie dzięki za to. Dodałem/p: OutputPath = \ bin i zadziałało. – user1325696

2

Korzystanie TFS Internecie mam ten sam błąd, aby to naprawić mój problem

enter image description here