2012-01-15 35 views
23

IssueIssue Xây dựng một dự án sử dụng msbuild duy nhất có nhiều cấu hình

Chúng tôi đang sử dụng cấu hình biến đổi bên trong giải pháp của chúng tôi. Ví dụ: Debug, Test, Staging, Release Tuy nhiên, những cấu hình này chỉ được sử dụng cho các dự án MVC của chúng tôi. tất cả các thư viện chỉ sử dụng Gỡ lỗi và Phát hành, điều này có ý nghĩa hơn, bởi vì các thư viện của chúng ta chỉ cần được xây dựng ở chế độ gỡ lỗi hoặc chế độ phát hành.

Sự cố phát sinh khi cố gắng xây dựng một dự án đơn lẻ từ dòng lệnh. Tôi cần để có thể làm điều này để tự động triển khai xây dựng của chúng tôi từ TeamCity đến môi trường thử nghiệm của chúng tôi.

Khi tôi xây dựng các dự án duy nhất như thế này

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" 

tôi nhận được lỗi sau

 
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. 

tôi biết ý nghĩa của nó, bởi vì sampleLibrary của tôi không có một cấu hình cho kiểm tra, và ánh xạ cho mẫuLibrary sẽ được chứa trong tệp .sln của tôi

Câu hỏi

Có cách nào để giải quyết vấn đề này mà không phải thêm các cấu hình đó cho mọi dự án thư viện không? Nó có mùi giống như một hack xấu xí ở đây.

+0

Tôi không chắc chắn nếu điều này đặc biệt đề cập đến vấn đề bạn đang gặp phải nhưng bạn có thể nhận được một số thông tin hữu ích từ bài đăng SO của tôi [ở đây] (http://stackoverflow.com/q/8334475/132599). –

Trả lời

5

Thật không may, bạn sẽ phải sửa đổi mọi dự án được sử dụng trong giải pháp để có cùng một đường dẫn xây dựng.

Tuy nhiên, đây là một điều khá dễ dàng để làm gì nếu dự án của bạn tất cả xây dựng để cùng một con đường bất kể cấu hình: trong Build tab thuộc tính dự án, chọn All Configurations từ Configuration thả xuống và sau đó thay đổi Output path.

Thao tác này sẽ tạo mục nhập cho tất cả các cấu hình trong tệp dự án chưa có và đặt cùng đường dẫn đầu ra cho tất cả cấu hình.

2

Một giải pháp đơn giản là thêm thuộc tính mới vào các dự án của bạn có tên là "DeploymentConfiguration" và làm cho nó ánh xạ giữa các cấu hình. Ví dụ:

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

Sau đó, trong invocation MSBuild của bạn, vượt qua trong

/p:DeploymentConfiguration=Test 

Trong triển khai MVC bạn muốn chỉ gán DeploymentConfiguration qua để cấu hình trực tiếp.

2

Đặt điều kiện OR cho các giá trị khác nhau trên Bản phát hành cho nhiều cấu hình khác nhau mà bạn có.

ví dụ:

<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

Cài đặt chuyển đổi/thuộc tính /p:OutputPath=Test có hoạt động cho bạn không? Nó sẽ xuất ra các dll trong một thư mục gọi là Test (Tôi guees bạn cũng có thể sử dụng các biến TeamCity). Liên kết với câu hỏi tương tự/trả lời https://stackoverflow.com/a/1083362/90033

+1

Rất cám ơn vì điều này. Tôi đã thêm/p: OutputPath = \ bin và nó hoạt động. – user1325696

2

Sử dụng tfs online Tôi đã nhận lỗi cùng, điều này cố định vấn đề của tôi

enter image description here

Các vấn đề liên quan