Câu trả lời:
Sự kiện trước và sau khi xây dựng chạy dưới dạng tập lệnh bó. Bạn có thể làm một tuyên bố có điều kiện trên $(ConfigurationName)
.
Ví dụ
if $(ConfigurationName) == Debug xcopy something somewhere
FYI, bạn không cần sử dụng goto. Lệnh shell IF có thể được sử dụng với dấu ngoặc tròn:
if $(ConfigurationName) == Debug (
copy "$(TargetDir)myapp.dll" "c:\delivery\bin" /y
copy "$(TargetDir)myapp.dll.config" "c:\delivery\bin" /y
) ELSE (
echo "why, Microsoft, why".
)
"$(ConfigurationName)"
(chú ý các trích dẫn) nếu bạn nhận được mã lỗi 255
$(ConfigurationName)
là trống (dòng lệnh sự kiện sau xây dựng). if "$(Configuration)" == "Debug"
đã làm cho tôi. BTW, nếu bạn muốn làm một cái gì đó trong tất cả các cấu hình khác, hãy sử dụng if NOT "$(Configuration)" == "Debug"
.
Thêm sự kiện xây dựng bài viết của bạn như bình thường. Sau đó lưu dự án của bạn, mở nó trong Notepad (hoặc trình soạn thảo yêu thích của bạn) và thêm điều kiện vào nhóm thuộc tính PostBuildEvent. Đây là một ví dụ:
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<PostBuildEvent>start gpedit</PostBuildEvent>
</PropertyGroup>
cd "$(ProjectDir)"
mở rộng đến cd ""
.
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="$(ConfigurationName) == Debug"> <Exec Command="your command"/></Target>
. Biến vĩ mô và mọi thứ hoạt động như bình thường.
Ngoài ra (vì các sự kiện được đưa vào tệp bó và sau đó được gọi), hãy sử dụng thông tin sau (trong hộp Sự kiện xây dựng, không phải trong tệp bó):
if $(ConfigurationName) == Debug goto :debug
:release
signtool.exe ....
xcopy ...
goto :exit
:debug
' Debug items in here
:exit
Bằng cách này bạn có thể có các sự kiện cho bất kỳ cấu hình, và vẫn quản lý nó với các macro thay vì phải chuyển chúng vào một tập tin thực thi, hãy nhớ rằng %1
là $(OutputPath)
vv
Error 1 The command "C:\MyProject\postbuild.bat" exited with code 99. MyProject
if
và sử dụnggoto :$(ConfigurationName)
Visual Studio 2015: Cú pháp đúng là (giữ nó trên một dòng):
if "$(ConfigurationName)"=="My Debug CFG" ( xcopy "$(TargetDir)test1.tmp" "$(TargetDir)test.xml" /y) else ( xcopy "$(TargetDir)test2.tmp" "$(TargetDir)test.xml" /y)
Không có lỗi 255 ở đây.
Kể từ Visual Studio 2019, .csproj
định dạng hiện đại hỗ trợ thêm một điều kiện trực tiếp vào thành Target
phần:
<Target Name="PostBuild" AfterTargets="PostBuildEvent" Condition="'$(Configuration)' == 'Debug'">
<Exec Command="nswag run nswag.json" />
</Target>
Giao diện người dùng không cung cấp cách thiết lập tính năng này, nhưng có vẻ như để lại Configuration
thuộc tính một cách an toàn nếu bạn thực hiện thay đổi thông qua giao diện người dùng.
Bạn có thể chuyển tên cấu hình cho tập lệnh hậu xây dựng và kiểm tra nó trong đó để xem nó có nên chạy không.
Truyền tên cấu hình với $(ConfigurationName)
.
Kiểm tra nó dựa trên cách bạn đang thực hiện bước hậu xây dựng - nó sẽ là một đối số dòng lệnh.
Điều này làm việc cho tôi trong Visual Studio 2015.
Tôi sao chép tất cả các tệp DLL từ một thư mục nằm trong thư mục thư viện ở cùng cấp độ với thư mục giải pháp của tôi vào thư mục tiêu của dự án đang được xây dựng.
Sử dụng một đường dẫn tương đối từ thư mục dự án của tôi và đi lên cấu trúc thư mục hai bước với .. \ .. \ lib
MySolutionFolder
.... MyProject
Lib
if $(ConfigurationName) == Debug (
xcopy /Y "$(ProjectDir)..\..\lib\*.dll" "$(TargetDir)"
) ELSE (echo "Not Debug mode, no file copy from lib")
Giống như bất kỳ cài đặt dự án nào, các bản dựng có thể được cấu hình cho mỗi Cấu hình. Chỉ cần chọn cấu hình bạn muốn thay đổi trong danh sách thả xuống của hộp thoại Trang thuộc tính và chỉnh sửa bước tạo bài.
Trong Visual Studio 2012 bạn phải sử dụng (tôi cũng nghĩ trong Visual Studio 2010)
if $(Configuration) == Debug xcopy
$(ConfigurationName)
đã được liệt kê dưới dạng macro, nhưng nó không được chỉ định.