15

Hiện nay tôi có một sự kiện sau xây dựng cấu hình trong dự án web của tôi sử dụng Visual Studio 2012 như thế này:Làm thế nào để thực thi một kịch bản PowerShell chỉ trước khi một web triển khai công việc Publish trong VS 2012?

enter image description here

này về cơ bản gọi là PowerShell script để thêm một thông báo bản quyền cho tất cả các file .cs.

Điều tôi muốn làm là thực thi tập lệnh PowerShell này chỉ trước Xuất bản ứng dụng web lên máy chủ từ xa. Làm như vậy tôi sẽ không gặp phải sự chậm trễ mỗi khi tôi cần gỡ lỗi dự án. Bạn có biết cách nào để hoàn thành điều này không?


Theo Sayed's answer, tôi tùy chỉnh một hồ sơ công bố cụ thể và bổ sung này:

<PipelineDependsOn> 
    CustomBeforePublish; 
    $(PipelineDependsOn); 
</PipelineDependsOn> 
</PropertyGroup> 
<Target Name="CustomBeforePublish"> 
<Message Text="******* CustomBeforePublish *******" Importance="high" /> 
<Exec Command="powershell.exe -file &quot;$(ProjectDir)\Copyright.ps1&quot;" /> 
</Target> 
+0

Xin lỗi, nhưng bạn đã thêm một Nhóm bất động sản mới ngoài nhóm sản phẩm đã tồn tại trong pubxml chưa? – nokturnal

Trả lời

15

Nó phụ thuộc về cách bạn xác định trước nhưng dưới đây là một kỹ thuật.

Khi bạn tạo hồ sơ xuất bản với VS2012, nó sẽ tạo cho bạn tệp .pubxml trong thư mục Properties \ PublishProfiles (My Project \ PublishProfiles cho VB). Đây là các tệp MSBuild và bạn có thể chỉnh sửa chúng để tùy chỉnh quá trình xuất bản. Trong trường hợp của bạn, bạn có thể tiêm một mục tiêu vào quá trình xuất bản, trước khi xuất bản thực sự xảy ra. Bạn có thể làm điều đó bằng cách mở rộng thuộc tính PipelineDependsOn như dưới đây.

<PropertyGroup> 
    <PipelineDependsOn> 
    CustomBeforePublish; 
    $(PipelineDependsOn); 
    </PipelineDependsOn> 
</PropertyGroup> 

<Target Name="CustomBeforePublish"> 
    <Message Text="********************************** CustomBeforePublish ***********************************" Importance="high"/> 
</Target> 

FYI về tùy chỉnh .wpp.targets, đó là kỹ thuật duy nhất mà chúng tôi có cho VS2010. Khuyến nghị của tôi ở đây là như sau; tùy chỉnh tệp .pubxml cho hầu hết các trường hợp và chỉ tạo tệp .wpp.targets nếu bạn muốn tùy chỉnh mọi xuất bản của dự án đã cho.

+0

Awesome Sayed! Làm việc tuyệt vời. Cảm ơn bạn đã giải thích ... –

+6

Điều gì sẽ xảy ra nếu tôi muốn thực hiện điều gì đó * sau * (không phải trước đó) xuất bản? – deerchao

+0

Hi Sayed, Im đang thử điều này trong vs2015 và tôi gặp lỗi khi tôi chọn xuất bản. Lỗi: "Tên thuộc tính trong phần tử không được công nhận". Bất kỳ ý tưởng? – webber

4

Khai báo ProjectName.wpp.targets tập tin sau đây trong thư mục gốc của ứng dụng web của bạn:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <BeforeAddContentPathToSourceManifest> 
     $(BeforeAddContentPathToSourceManifest); 
     AddCopyright; 
    </BeforeAddContentPathToSourceManifest> 
    </PropertyGroup> 

    <Target Name="AddCopyright"> 
    <!-- I recommend passing in $(_MSDeployDirPath_FullPath) to your script 
     as the base path to search to avoid having to perform a VCS rollback 
     (files are copied there before the deployment) 
    --> 
    <Exec Command="powershell.exe -file &quot;$(SolutionDir)Copyright.ps1&quot; &quot;$(_MSDeployDirPath_FullPath)&quot;" /> 
    </Target> 
</Project> 
+0

Cảm ơn bạn rất nhiều vì câu trả lời Richard. Như bạn có thể thấy trong câu trả lời của Sayed có một cách để tùy chỉnh một hồ sơ xuất bản cụ thể và đó là một phù hợp hơn trong trường hợp của tôi. –

+0

Xem câu trả lời của tôi bên dưới về cách sử dụng .wpp.targets với VS2012 –

+0

@SayedIbrahimHashimi - Cảm ơn bạn đã đứng đầu. Bạn nên xem xét việc cập nhật tài liệu khi chúng được ghi nhận là bằng (theo mức độ liên quan). –