Kā publicēt kā atsevišķu failu bez iekļaušanas vienas izpildes failā

Lapa atjaunota :
Lapas izveides datums :

Vides

Visual Studio
  • Visual Studio 2019 Visual Studio 2019
ASP.NET kodols
  • 3.1

Kas ir viens fails?

Papildus exe failam programmas palaišanai bieži vien ir nepieciešams fails, piemēram, dll fails. Jūs izplatīsiet vairākus failus un programmas.

Tagad varat palaist visus failus vienā exe, publicējot programmu, izmantojot līdzekli "Izveidot vienu failu", kas pievienots no .NET Core 3.0. (PdB fails ir atkļūdošanas informācijas fails, tāpēc tas nav jāizplata.)

Tomēr dažos gadījumos, iespējams, vēlēsities ievietot konfigurācijas failu mapē ar exe, nevis iekļaut to exe. Šajā sadaļā ir aprakstīts, kā to izdarīt.

Notiek gatavošanās viena faila izvadei

Kā paraugs, šāda projekta konfigurācija ir jāizmanto, lai ielādētu TextFile1.txt failu startēšanas laikā. TextFile1.txt ir paredzēts izplatīt ar exe failu, tāpēc padariet to "Build Action: None" un "Copy to Output Directory: Copy to New If New". TextFile1.txt saturs var būt patvaļīgs.

Programmu var izveidot ar pieņēmumu, ka vēlaties ielādēt failus, kas tiek izplatīti kopā.

Tomēr izpildāmais fails vienā failā faktiski tiek izvērsts atsevišķā pagaidu mapē, kad tas tiek palaists. Ielādējot failu relatīvā ceļā, tas ir jānorāda mapē, kurā startējāt izpildāmo failu, nevis mapē, kurā atrodas izpildāmais fails.

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

Atkļūdojot, var redzēt, ka fails ir ielādēts.

TextFile1.txt tiek drukāts arī izvades mapē, jo tas vēl nav kompilēts vienā failā.

Publicēsim to kā vienu failu šādā stāvoklī. Procedūra ir izlaista, jo publikācija nav paredzēta.

Mērķa izpildlaikam jābūt portatīvam, lai tas būtu viens fails.

Man nav noteikti kaut ko vēl, tāpēc tas ir viens fails kā parasti.

Palaižot tekstuNav TextFile1.txt, tāpēc tiek parādīts kļūdas ziņojums.

Kā publicēt konkrētu failu, neiekļaujot to vienā failā

Atveriet projekta failu (csproj) kodā ar failu, kuru nevēlaties iekļaut projektā.

Es domāju, ka tas xml kā šis: Meklējiet failu, kuram vēlaties mainīt iestatījumus. Atkarībā no projekta iestatījumiem, iespējams, nav mērķa faila, tāpēc, iespējams, tas ir jāpievieno manuāli.

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

Kad atrodat failu, pievienojiet ExcludeFromSingleFile ar patiesu, šādi: Kā norāda nosaukums, tas tiek izslēgts no viena faila.

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

Lūdzu, mēģiniet publicēt pēc saglabāšanas. Jūs varat redzēt, ka tas ir publicēts no viena faila.

Jūs joprojām varat palaist publicēto failu, lai pārbaudītu, vai tas darbojas pareizi.