2008-09-29 31 views
13

Có ai biết cách lấy tên của TARGET (/ t) được gọi từ dòng lệnh MSBuild không? Có một vài loại mục tiêu có thể được gọi và tôi muốn sử dụng thuộc tính đó trong thông báo cho người dùng.MSBuild - Lấy mục tiêu được gọi từ dòng lệnh

Ví dụ:

msbuild Project.proj /t: ApplicationDeployment/p: Môi trường = DEV

tôi muốn truy cập vào các từ mục tiêu ApplicationDeployment trong tập tin .Proj tôi.

Có tài sản nào tôi có thể truy cập không? Bất kỳ đầu mối làm thế nào để làm điều này?

CHỈNH SỬA: Tôi không muốn cũng phải chuyển vào một thuộc tính để nhận điều này.

CẬP NHẬT: Điều này được dựa trên tập lệnh triển khai sử dụng tập lệnh MSBuild. Máy chủ xây dựng của tôi không được sử dụng để triển khai mã, chỉ để xây dựng. Bản thân máy chủ xây dựng đã xây dựng các thông báo có thể được chọn tham gia.

Trả lời

6

Tôi đã tìm thấy câu trả lời!

<Target Name="ApplicationDeployment" > 
    <CreateProperty Value="$(MSBuildProjectName) - $(Environment) - Application Deployment Complete"> 
     <Output TaskParameter="Value" PropertyName="DeploymentCompleteNotifySubject" /> 
    </CreateProperty> 

Tôi muốn cung cấp tín dụng một phần để thờ ơ. Không chắc chắn làm thế nào để làm điều đó.

+1

Câu trả lời cho câu hỏi của bạn như thế nào?Điều này sẽ không cung cấp cho bạn danh sách các mục tiêu được gọi trên dòng lệnh, nó sẽ tạo thuộc tính mới khi nhiệm vụ cụ thể được thực thi. Câu hỏi của bạn có sai không? –

+0

Về bản chất, điều này đạt được kết quả cuối cùng. Điều này sẽ cho phép bạn thiết lập một thuộc tính có thể cho bạn biết đích được gọi là gì (trong trường hợp của tôi là AppDeploy vs DBDeploy). Trong mỗi trường hợp nhận được mỗi mục tiêu, bạn có thể đặt cùng thuộc tính này. Tôi đã xây dựng thêm một số chi tiết bằng cách thêm những thứ vào giá trị mà tôi tạo ra. – ferventcoder

8

Tôi không chắc chắn cách thực hiện chính xác những gì bạn yêu cầu, nhưng bạn có thể chuyển chuỗi đó bằng tùy chọn/p không?

msbuild Project.proj /t:ApplicationDeployment /p:Environment=DEV;MyValue=ApplicationDeployment 

Chỉ khác cách tôi có thể thấy để làm điều đó là sử dụng một tài sản có điều kiện trong mỗi mục tiêu, và do đó thiết lập các mục tiêu đầu tiên được gọi.

<Target Name="ApplicationDeployment"> 
<PropertyGroup> 
    <InvokedTarget Condition="'${InvokedTarget}'==''">ApplicationDeployment</InvokedTarget> 
</PropertyGroup> 

... 
</Target> 
+0

Tôi có thể, nhưng tôi muốn biết cách truy cập mục tiêu. – ferventcoder

+0

Cảm ơn bạn đã bỏ phiếu xuống. Tôi đã đọc tài liệu MSBuild để kiểm tra, và tôi không tin rằng MSBuild cung cấp thông tin này. Workaround được cung cấp. –

+0

Tôi đánh giá cao cách giải quyết –

3

Không có cách nào để thực hiện việc này (mà tôi biết). MSBuild không có thuộc tính cho danh sách các mục tiêu được yêu cầu xây dựng.

Tuy nhiên, nếu bạn tìm thấy một cách, hãy nhớ rằng đó có thể không phải là một mục tiêu duy nhất, mà thay vào đó là danh sách các mục tiêu cần xây dựng.

+0

Phải. Tôi hiểu. : D – ferventcoder

0

Tôi khuyên bạn nên sử dụng máy chủ như CCNET để xử lý các lệnh thi hành và thông báo. Chắc chắn, bạn có thể làm những việc với kịch bản MSBuild của bạn để gửi ra các thông báo, nhưng miền đó thuộc về máy chủ xây dựng.

+0

Hãy suy nghĩ tập lệnh triển khai. – ferventcoder

+0

Tôi đã chỉnh sửa để rõ ràng. Cảm ơn bạn đã chỉ ra rằng – ferventcoder

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