2009-05-01 41 views
17

Tích hợp liên tục

Tôi đã làm việc trên tập lệnh PowerShell để giữ cho quy trình phát triển của chúng tôi được sắp xếp hợp lý. Tôi đã lên kế hoạch chạy nó như một sự kiện hậu xây dựng, nhưng tôi đang gặp một số rắc rối.Kịch bản PowerShell trong PostBuild

Từ PowerShell nhanh chóng, các công trình sau đây tuyệt vời:

PS C:\> ./example.ps1 

Tuy nhiên, khi cố gắng chạy này từ cmd.exe như sau:

C:\> powershell -command "&\"C:\path to script\example.ps1\"" 

Kịch bản thực hiện nhưng tôi nhận được một vòng các lỗi trở lại từ PowerShell, bao gồm hầu hết các lỗi độ phân giải đường dẫn từ hàm resolve-path:

Giải quyết đường dẫn: Không thể tìm thấy đường dẫn 'C: \ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ iirf \ cms \ isapirewrite4.dl l' bởi vì nó không tồn tại. Tại C: \ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ C gmFamilyComm \ scripts \ cms.ps1: 4 char: 27 + $ iirfpath = (quyết-path < < < < ../ iirf/cms/isapirewrite4.dll) .path,

Giải quyết đường dẫn: Không thể tìm đường dẫn 'C: \ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ CgmFamilyComm \ FamilyComm \ familycomm' vì nó do es không tồn tại. Tại C: \ Documents and Settings \ bdunbar \ My Documents \ Visual Studio 2008 \ Projects \ C gmFamilyComm \ scripts \ cms.ps1: 5 char: 27 + $ vdirpath = (quyết-path < < < < ../ familycomm) .path

Có cách nào để giải quyết vấn đề này không? Có thể nào là sự cố khi chạy resolve-path trong cmd.exe?

[Cập nhật]

tôi đã có thể thay đổi mọi thứ để có được xung quanh các lỗi đang xảy ra, nhưng tôi vẫn nhận được lỗi mà làm việc hoàn toàn tốt đẹp từ dấu nhắc lệnh PowerShell. Tôi không thể tìm ra sự khác biệt là gì.

+0

gì Jason nói. Sự khác biệt có thể có liên quan đến đường phân giải-đường dẫn của bạn. Nếu nghi ngờ, hãy thử và làm cho tập lệnh của bạn hoạt động mà không cần sử dụng đường dẫn giải quyết. –

Trả lời

25

tôi đã thực hiện công việc này trong quá khứ (xem http://sharepointpdficon.codeplex.com/SourceControl/changeset/view/13092#300544 nếu quan tâm):

C: \ WINDOWS \ system32 \ windowspowershell \ v1.0 \ powershell.exe -NoLogo -NonInteractive -Command. Triển khai '$ (ProjectDir) \ PostBuildScript.ps1' -ProjectDir: '$ (ProjectDir)' -ConfigurationName: '$ (ConfigurationName)' -TargetDir: '$ (TargetDir)' -TargetFileName: '$ (TargetFileName)' -TargetName : '$ (TargetName)

Sau đó, ném các tham số này vào dòng đầu tiên của tập lệnh sau khi xây dựng (nếu y ou nghĩ rằng bạn có thể sử dụng chúng):

param($ProjectDir, $ConfigurationName, $TargetDir, $TargetFileName)

Ngoài ra tôi phải chỉ ra, tôi không sử dụng này hiện nay.Tôi đã thích sử dụng nó như là một scratchpad nhanh chóng để tải lại dữ liệu thử nghiệm để chạy thử nghiệm tích hợp.

+0

Cảm ơn câu trả lời Peter, công trình này hoàn hảo. Là gì. ở phía trước tên tệp và bạn biết cách đặt nó ở đó như thế nào? Cảm ơn một lần nữa, +1 từ tôi. – brad

+0

haha, ước gì tôi biết. Tôi rải sỏi của tôi với nhau từ một kịch bản tôi tìm thấy trên một chủ đề diễn đàn Channel 9 Tôi nghĩ rằng, bây giờ tôi không thể tìm thấy nó. –

+0

Tôi có thể đoán rằng đó là dấu chấm, bao gồm cả tập lệnh, mặc dù tôi không nghĩ rằng bạn có thể bao gồm dấu chấm và chuyển đối số vào tập lệnh. Hấp dẫn. Dù sao, giải pháp-đường dẫn sẽ hoạt động khác nhau nếu bạn thực hiện và so khớp với dấu chấm bao gồm tập lệnh. –

3

Dường như vấn đề của bạn là cách đường dẫn tương đối được giải quyết. Đường dẫn tương đối được giải quyết dựa trên vị trí hiện tại (được lưu trữ trong $ pwd) và không dựa trên vị trí của tập lệnh. Vì vậy, nếu bạn khởi chạy kịch bản từ C: \, nó chắc chắn sẽ không hoạt động.

tôi sẽ đề nghị bạn caculate các đường dẫn dựa trên một cuộc tranh cãi (như Peter Seale cho thấy), hoặc lấy các vị trí thực tế của kịch bản từ:

$MyInvocation.MyCommand.Path 
Các vấn đề liên quan