วิธีการเผยแพร่เป็นแฟ้มที่แยกต่างหากและไม่ได้รวมอยู่ในแฟ้มที่ประกาศเป็นแฟ้มที่ปฏิบัติการได้เดียว
สภาพ แวด ล้อม
- สตูดิโอภาพ
-
- สตูดิโอภาพ 2019
- แกนASP.NET
-
- 3.1
ไฟล์เดียวคืออะไร
นอกจาก exe ไฟล์คุณมักจะต้องไฟล์เช่น dll เพื่อเรียกใช้โปรแกรม คุณจะกระจายแฟ้มและโปรแกรมหลายแฟ้ม
ขณะนี้คุณสามารถเรียกใช้แฟ้มทั้งหมดใน exe หนึ่ง โดยการเผยแพร่โปรแกรมโดยใช้คุณลักษณะ "สร้างแฟ้มเดียว" ที่เพิ่มจาก.NET Core 3.0 (ไฟล์ pdb เป็นไฟล์ข้อมูลดีบัก คุณจึงไม่ต้องแจกจ่ายไฟล์)
อย่างไรก็ตาม ในบางกรณี คุณอาจต้องการวางแฟ้มการกําหนดค่าในโฟลเดอร์ที่มี exe แทนการรวมไว้ใน exe ส่วนนี้อธิบายวิธีการทําเช่นนี้
การจัดเตรียมสําหรับเอาต์พุตไฟล์เดียว
ตั้งค่าคอนฟิกโครงการต่อไปนี้ควรจะใช้เพื่อโหลดแฟ้ม TextFile1.txt เมื่อเริ่มต้น TextFile1.txt มีวัตถุประสงค์เพื่อกระจายกับไฟล์ exe ดังนั้นทําให้ "สร้างการดําเนินการ:ไม่มี"และ "คัดลอกไปยังไดเรกทอรีผลลัพธ์:คัดลอกไปยังใหม่หากใหม่" เนื้อหาของ TextFile1.txt สามารถเป็นโดยพลการ
คุณสามารถสร้างโปรแกรมด้วยสมมติฐานที่คุณต้องการโหลดแฟ้มที่มีการแจกจ่ายร่วมกัน
อย่างไรก็ตาม แฟ้มปฏิบัติการในแฟ้มเดียวจริงๆ ขยายไปยังโฟลเดอร์ชั่วคราวแยกต่างหากเมื่อรัน เมื่อคุณโหลดแฟ้มในเส้นทางสัมพัทธ์ คุณต้องระบุในโฟลเดอร์ที่คุณเริ่มต้นแฟ้มที่ปฏิบัติการได้ ไม่ใช่ในโฟลเดอร์ที่แฟ้มที่ปฏิบัติการได้อยู่
using System;
using System.Diagnostics;
using System.IO;
namespace ExcludeFromSingleFile
{
class Program
{
static void Main(string[] args)
{
using var processModule = Process.GetCurrentProcess().MainModule;
Console.WriteLine(File.ReadAllText(Path.Combine(Path.GetDirectoryName(processModule.FileName), "TextFile1.txt")));
Console.ReadKey();
}
}
}
เมื่อคุณตรวจแก้จุดบกพร่อง คุณสามารถดูว่า แฟ้มถูกโหลด
TextFile1.txt จะถูกพิมพ์ในโฟลเดอร์ผลลัพธ์เนื่องจากยังไม่ได้คอมไพล์ลงในแฟ้มเดียว
ให้เผยแพร่เป็นแฟ้มเดียวในสถานะนี้ ขั้นตอนถูกละไว้เนื่องจากสิ่งพิมพ์ไม่ได้กําหนดไว้
รันไทม์เป้าหมายต้องไม่ใช่แบบพกพาเป็นแฟ้มเดียว
ฉันไม่ได้ตั้งค่าอะไรเลยดังนั้นจึงเป็นไฟล์เดียวตามปกติ
ไม่มี TextFile1.txt เมื่อคุณเรียกใช้ดังนั้นคุณจะได้รับข้อผิดพลาด
วิธีการเผยแพร่แฟ้มเฉพาะโดยไม่ต้องรวมไว้ในแฟ้มเดียว
เปิดแฟ้มโครงการ (csproj) ในรหัสกับแฟ้มที่คุณไม่ต้องการรวมไว้ในโครงการ
ฉันคิดว่ามันเป็น XML เช่นนี้ ค้นหาแฟ้มที่คุณต้องการเปลี่ยนแปลงการตั้งค่า คุณอาจไม่มีไฟล์เป้าหมาย อยู่ด้วย
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="TextFile1.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
เมื่อคุณพบแฟ้ม เพิ่มExcludeFromSingleFileด้วยจริงเป็นดังนี้: เป็นชื่อนัย, มันจะถูกแยกออกจากไฟล์เดียว.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<None Update="TextFile1.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<!-- ここから追加 -->
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<!-- ここまで追加 -->
</None>
</ItemGroup>
</Project>
โปรดลองเผยแพร่เมื่อคุณได้บันทึกแล้ว คุณสามารถดูได้ว่ามีการเผยแพร่ออกจากไฟล์เดียว
คุณยังสามารถเรียกใช้แฟ้มที่ประกาศเพื่อตรวจสอบว่า แฟ้มทํางานได้อย่างถูกต้อง