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ỉ ra cách loại trừ các tệp.
Bao gồm các tập tin bổ sung
Bao gồm các tệp bổ sung vào gói khó hơn một chút nhưng vẫn không có vấn đề gì nếu bạn cảm thấy thoải mái với MSBuild và nếu bạn không đọc thì hãy đọc nó. Để làm điều này, chúng ta cần nối 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, PipelinePreDeployCopy ALLFilesToOneFolderDependsOn, mà chúng ta có thể khai thác và tiêm vào mục tiêu của chính mình. Vì vậy, chúng tôi sẽ tạo một mục tiêu có tên CustomCollectFiles và đưa mục tiêu đó vào quy trình. Chúng tôi đạt được điều này với những điều sau đây (hãy nhớ sau câu lệnh nhập khẩu).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</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 Extra Files cao hơ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 tin. Đây là mục tiêu CustomCollectFiles và chúng tôi 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 đã bảo nó lấy 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ó. Nếu có bất kỳ cơ hội nào bạn cần loại trừ một cái gì đó khỏi danh sách đó, hãy thêm một Exclude
thuộc tính vào _CustomFiles
.
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)% (Tên tệp)% (Tiện ích mở rộng) tại đây. Điều đang nói là đặt nó ở cùng một vị trí tương đối trong gói vì nó nằm trong thư mục Extra Files.
Không bao gồm các tập tin
Nếu bạn mở tệp dự án của một ứng dụng web được tạo bằng VS 2010 về phía dưới cùng của nó, bạn sẽ tìm thấy một dòng với.
<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 không 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 ta cần. Hầu hết các tùy chỉnh của chúng tôi sẽ là sau lần nhập đó, nếu bạn không chắc chắn đặt sau! Vì vậy, nếu bạn có các tệp để 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 có tên Sample.Debug.xml có trong ứng dụng web của bạn nhưng bạn muốn loại trừ tệp đó 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 mục này, các tệp sẽ tự động bị loại trừ. Lưu ý việc sử dụng FromTarget
siêu dữ liệu ở đây. Tôi sẽ không nhận được ở đây, nhưng bạn nên biết để luôn luôn xác định điều đó.