Tôi đã trả lời một câu hỏi tương tự nhưng khác tại Làm cách nào để bạn bao gồm các tệp bổ sung bằng cách sử dụng gói triển khai web VS2010? .
Trong trường hợp của bạn, bạn đang sử dụng sự kiện tạo bài đăng, tôi khuyên bạn nên bỏ sự kiện tạo bài đăng và thực hiện các hành động của mình bằng cách sử dụng các mục tiêu MSBuild của riêng bạn thay vì sự kiện tạo bài đăng. Bên dưới, bạn sẽ tìm thấy nội dung của câu trả lời khác.
Từ: Làm thế nào để bạn bao gồm các tệp bổ sung bằng cách sử dụng gói triển khai web VS2010?
Câu hỏi tuyệt vời. Tôi vừa đăng một mục blog rất chi tiết về điều này tại Công cụ triển khai web (MSDeploy): Gói xây dựng bao gồm các tệp bổ sung hoặc loại trừ các tệp cụ thể .
Đây là tóm tắt. Sau khi bao gồm các tệp, tôi cũng chỉ cách loại trừ các tệp.
Bao gồm các tệp bổ sung
Bao gồm các tệp bổ sung vào gói có khó hơn một chút nhưng vẫn không có bigee nếu bạn cảm thấy thoải mái với MSBuild và nếu bạn không thích thì hãy đọc phần này. Để làm được điều này, chúng ta cần tham gia vào một phần của quy trình thu thập các tệp để đóng gói. Mục tiêu chúng ta cần mở rộng được gọi là CopyAllFilesToSingleFolder. Mục tiêu này có thuộc tính phụ thuộc, PipelinePreDeployCopyAllFilesToOneFolderDependsOn, mà chúng ta có thể khai thác và đưa mục tiêu của riêng mình vào. Vì vậy, chúng tôi sẽ tạo một mục tiêu có tên CustomCollectFiles và đưa nó vào quy trình. Chúng tôi đạt được điều này với những điều sau (hãy nhớ sau câu lệnh nhập).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
Điều này sẽ thêm mục tiêu của chúng tôi vào quy trình, bây giờ chúng tôi cần xác định chính mục tiêu. Giả sử rằng bạn có một thư mục có tên Tệp phụ nằm trên 1 cấp so với dự án web của bạn. Bạn muốn bao gồm tất cả các tệp đó. Đây là mục tiêu CustomCollectFiles và chúng ta sẽ thảo luận sau đó.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Ở đây những gì tôi đã làm là tạo mục _CustomFiles và trong thuộc tính Bao gồm yêu cầu nó chọn tất cả các tệp trong thư mục đó và bất kỳ thư mục nào bên dưới nó. Sau đó, tôi sử dụng mục này để điền vào mục FilesForPackagingFromProject. Đây là mục mà MSDeploy thực sự sử dụng để thêm các tệp bổ sung. Cũng lưu ý rằng tôi đã khai báo giá trị DestinationRelativePath siêu dữ liệu. Điều này sẽ xác định đường dẫn tương đối mà nó sẽ được đặt trong gói. Tôi đã sử dụng câu lệnh Extra Files% (RecursiveDir)% (Filename)% (Extension) ở đây. Những gì đang nói là đặt nó ở cùng một vị trí tương đối trong gói như nó nằm trong thư mục Extra Files.
Loại trừ tệp
Nếu bạn mở tệp dự án của ứng dụng web được tạo bằng VS 2010 về phía cuối tệp, bạn sẽ thấy một dòng có.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW bạn có thể mở tệp dự án bên trong VS. Nhấp chuột phải vào dự án chọn Unload Project. Sau đó nhấp chuột phải vào dự án chưa tải và chọn Chỉnh sửa dự án.
Tuyên bố này sẽ bao gồm tất cả các mục tiêu và nhiệm vụ mà chúng tôi cần. Hầu hết các tùy chỉnh của chúng tôi phải sau lần nhập đó, nếu bạn không chắc hãy đặt nếu sau! Vì vậy, nếu bạn có các tệp cần loại trừ, có một tên mục, ExcludeFromPackageFiles, có thể được sử dụng để làm như vậy. Ví dụ: giả sử bạn có tệp tên Sample.Debug.js được bao gồm trong ứng dụng web của bạn nhưng bạn muốn tệp đó bị loại trừ khỏi các gói đã tạo. Bạn có thể đặt đoạn mã bên dưới sau câu lệnh nhập đó.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Bằng cách khai báo việc điền mục này, các tệp sẽ tự động bị loại trừ. Lưu ý việc sử dụng siêu dữ liệu FromTarget tại đây. Tôi sẽ không đi sâu vào điều đó ở đây, nhưng bạn nên biết để luôn chỉ rõ điều đó.