Kaip publikuoti kaip atskirą failą neįtraukiant į vieno paleisties failą

Puslapis atnaujintas :
Puslapio sukūrimo data :

Aplinkos

"Visual" studija
  • Visual Studio 2019
ASP.NET branduolys
  • 3.1

Kas yra vienas failas?

Be exe failo, dažnai reikia failo, pvz., dll, kad galėtumėte paleisti programą. Jūs platinsite kelis failus ir programas.

Dabar galite paleisti visus failus į vieną exe publikuodami programą naudodami funkciją "Sukurti vieną failą" įtraukta iš .NET Core 3.0. (PDB failas yra derinimo informacijos failas, todėl jums nereikia jo platinti.)

Tačiau kai kuriais atvejais galbūt norėsite įdėti konfigūracijos failą į aplanką su exe, o ne įtraukti jį į exe. Šiame skyriuje aprašoma, kaip tai padaryti.

Ruošiamasi vieno failo išvesčiai

Kaip pavyzdį, šią projekto konfigūracija turėtų būti naudojamas įkelti TextFile1.txt failą paleisties metu. TextFile1.txt skirtas platinti su exe failą, todėl padaryti jį "Sukurti veiksmų: Nėra" ir "Kopijuoti į išvesties katalogas: Kopijuoti į naują Jei naujas." TextFile1.txt turinys gali būti savavališkas.

Galite sukurti programą su prielaida, kad norite įkelti failus, kurie yra platinami kartu.

Tačiau vykdomasis failas viename faile iš tikrųjų išplečiamas į atskirą laikinąaplanką, kai jis paleidžiamas. Kai įkeliate failą santykiniu keliu, turite jį nurodyti aplanke, kuriame pradėjote vykdomąjį failą, o ne aplanke, kuriame yra vykdomasis failas.

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();
    }
  }
}

Kai derinti, galite matyti, kad failas yra įkeltas.

TextFile1.txt taip pat spausdinamas išvesties aplanke, nes jis dar nebuvo sudarytas į vieną failą.

Leiskite publikuoti jį kaip vieną failą šioje būsenoje. Procedūra praleista, nes skelbti nėra skirta.

Paskirties vykdyklė turi būti neįskaitoma, kad būtų vienas failas.

Aš nieko dar nenustatyčiau, todėl tai vienas failas, kaip įprasta.

Kai paleidžiate textFile1.txt, nėra textFile1.txt, todėl gausite klaidą.

Kaip publikuoti konkretų failą neįtraukiant jo į vieną failą

Atidarykite projekto failą (csproj) kodu su failu, kurio nenorite įtraukti į projektą.

Manau, kad xml like this: Ieškokite failo, kurio parametrus norite keisti. Atsižvelgiant į projekto parametrus, gali būti, kad neturite paskirties failo, todėl gali tekti jį pridėti rankiniu būdu.

<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>

Radę failą, pridėti ExcludeFromSingleFile su true, taip: Kaip rodo pavadinimas, jis pašalinamas iš vieno failo.

<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>

Bandykite publikuoti, kai įrašėsite. Galite matyti, kad jis publikuojamas iš vieno failo.

Vis tiek galite paleisti publikuotą failą, kad patikrintumėte, ar jis veikia tinkamai.