คำถามที่ดี ฉันเพียงแค่โพสต์รายการบล็อกรายละเอียดมากเกี่ยวกับเรื่องนี้ในเว็บเครื่องมือการจัดวาง (MSDeploy): สร้างแพคเกจรวมถึงไฟล์พิเศษหรือไม่รวมไฟล์ที่เฉพาะเจาะจง
นี่คือเรื่องย่อ หลังจากรวมไฟล์แล้วฉันจะแสดงวิธีการยกเว้นไฟล์ด้วย
รวมถึงไฟล์พิเศษ
การรวมไฟล์พิเศษลงในแพ็คเกจนั้นยากกว่าเล็กน้อย แต่ก็ยังไม่มีปัญหาหากคุณพอใจกับ MSBuild และถ้าคุณไม่ได้อ่านสิ่งนี้ ในการดำเนินการนี้เราจำเป็นต้องเชื่อมโยงเข้าไปในส่วนของกระบวนการที่รวบรวมไฟล์สำหรับบรรจุภัณฑ์ เป้าหมายที่เราต้องการขยายเรียกว่า CopyAllFilesToSingleFolder เป้าหมายนี้มีคุณสมบัติการพึ่งพา PipelinePreDeployCopyAllFilesToOneFolderDependsOn ที่เราสามารถแตะและฉีดเป้าหมายของเราเองได้ ดังนั้นเราจะสร้างเป้าหมายชื่อ CustomCollectFiles และฉีดเข้าไปในกระบวนการ เราบรรลุสิ่งนี้ด้วยสิ่งต่อไปนี้ (จำไว้หลังคำสั่งนำเข้า)
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
สิ่งนี้จะเพิ่มเป้าหมายของเราในกระบวนการตอนนี้เราต้องกำหนดเป้าหมายเอง สมมติว่าคุณมีโฟลเดอร์ชื่อ Extra Files ซึ่งอยู่เหนือโครงการเว็บของคุณ 1 ระดับ คุณต้องการรวมไฟล์เหล่านั้นทั้งหมด นี่คือเป้าหมาย CustomCollectFiles และเราจะพูดถึงหลังจากนั้น
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
สิ่งที่ฉันทำคือสร้างรายการ _CustomFiles และในแอตทริบิวต์รวมบอกให้รับไฟล์ทั้งหมดในโฟลเดอร์นั้นและโฟลเดอร์ใด ๆ ที่อยู่ข้างใต้ ถ้ามีโอกาสใด ๆ ที่คุณต้องยกเว้นบางสิ่งบางอย่างจากรายการที่เพิ่มแอตทริบิวต์Exclude
_CustomFiles
จากนั้นฉันใช้รายการนี้เพื่อเติมข้อมูลรายการ FilesForPackagingFromProject นี่คือรายการที่ MSDeploy ใช้เพื่อเพิ่มไฟล์พิเศษ โปรดสังเกตด้วยว่าฉันประกาศค่า DestinationRelativePath ของข้อมูลเมตา สิ่งนี้จะกำหนดเส้นทางสัมพัทธ์ที่จะวางไว้ในแพ็คเกจ ฉันใช้คำสั่ง Extra Files% (RecursiveDir)% (Filename)% (Extension) ที่นี่ สิ่งที่พูดคือการวางไว้ในตำแหน่งสัมพัทธ์เดียวกันในแพ็คเกจเนื่องจากอยู่ในโฟลเดอร์ Extra Files
การยกเว้นไฟล์
หากคุณเปิดไฟล์โครงการของเว็บแอปพลิเคชันที่สร้างด้วย VS 2010 ที่ด้านล่างคุณจะพบบรรทัดที่มี
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
BTW คุณสามารถเปิดไฟล์โครงการภายใน VS. คลิกขวาที่โครงการเลือก Unload Project จากนั้นคลิกขวาที่โครงการที่ไม่ได้โหลดแล้วเลือกแก้ไขโครงการ
คำสั่งนี้จะรวมเป้าหมายและงานทั้งหมดที่เราต้องการ การปรับแต่งส่วนใหญ่ของเราควรเป็นหลังจากการนำเข้านั้นหากคุณไม่แน่ใจว่าใส่หลังจากนั้น ดังนั้นหากคุณมีไฟล์ที่จะยกเว้นจะมีชื่อรายการ ExcludeFromPackageFiles ที่สามารถใช้ทำเช่นนั้นได้ ตัวอย่างเช่นสมมติว่าคุณมีไฟล์ชื่อ Sample.Debug.xml ซึ่งรวมอยู่ในเว็บแอปพลิเคชันของคุณ แต่คุณต้องการให้ไฟล์นั้นถูกแยกออกจากแพ็คเกจที่สร้างขึ้น คุณสามารถวางข้อมูลโค้ดด้านล่างหลังจากคำสั่งนำเข้านั้น
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
เมื่อประกาศการเติมข้อมูลรายการนี้ไฟล์จะถูกแยกออกโดยอัตโนมัติ สังเกตการใช้FromTarget
ข้อมูลเมตาที่นี่ ฉันจะไม่เข้าไปที่นี่ แต่คุณควรรู้ว่าต้องระบุไว้เสมอ