2013-09-30 18 views
16

Chúng ta có thể có một cái gì đó như thế này:VS2010: Liệu chúng tôi có thể có nhiều nếu trong sự kiện sau khi xây dựng?

if "Debug"=="$(ConfigurationName)" 
(
    goto :nocopy 
) 
else if "Release"=="$(ConfigurationName)" 
(
    del "$(TargetPath).config" 
    copy "$(ProjectDir)\App.Release.config" "$(TargetPath).config" 
) 
else if "ReleaseBeta"=="$(ConfigurationName)" 
(
    del "$(TargetPath).config" 
    copy "$(ProjectDir)\App.ReleaseBeta.config" "$(TargetPath).config" 
) 
else if "ReleaseProduction"=="$(ConfigurationName)" 
(
    del "$(TargetPath).config" 
    copy "$(ProjectDir)\App.ReleaseProduction.config" "$(TargetPath).config" 
) 
    :nocopy 

Tôi đã thử nó, nhưng nó không hoạt động. Mã lỗi là 255.

Trả lời

28

Bạn có thể có nhiều báo cáo có điều kiện như bạn muốn, chỉ cần tách chúng bằng dòng mới và mất gì khác

Vì vậy, thay đổi

if "Debug"=="$(ConfigurationName)" 
(
    goto :nocopy 
) 
else if... 

Để

if "Debug" == "$(ConfigurationName)" (goto :nocopy) 
if "Release" ==" $(ConfigurationName)" (
    del "$(TargetPath).config" 
    copy "$(ProjectDir)\App.Release.config" "$(TargetPath).config") 
if ... 

và nó sẽ biên dịch và chỉ chạy tốt

Lưu ý: Các lệnh sẽ được diễn giải theo từng dòng theo cách của DOS, vì vậy điều quan trọng là đặt dấu mở ngoặc "(" trong cùng dòng với câu lệnh if và dấu đóng ngoặc ")" trong cùng dòng với lệnh cuối cùng trong khối.

4

Nếu logic sau khi xây dựng của bạn trở nên phức tạp, tôi khuyên bạn nên chuyển nó sang tệp bên ngoài. Ví dụ, sau đây sau sự kiện xây dựng:

CALL "$(ProjectDir)PostBuild.cmd" $(ConfigurationName) 

thực thi một tập tin batch PostBuild.cmd trong dự án thư mục, đi qua $ (ConfigurationName) như một tham số. Bạn cũng có thể chuyển các tham số khác, chẳng hạn như $ (TargetPath).

Sau đó, bạn có thể thực hiện bất kỳ thứ gì bạn muốn bao gồm nhiều câu lệnh if và quan trọng hơn là gỡ lỗi nó mà không cần chạy Visual Studio.

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