एक एकल-रन फ़ाइल में शामिल किए बिना एक अलग फ़ाइल के रूप में कैसे प्रकाशित करें

पेज अद्यतन :
पेज निर्माण की तारीख :

वातावरण

विजुअल स्टूडियो
  • विजुअल स्टूडियो 2019
ASP.NET कोर
  • 3.1

एक ही फाइल क्या है?

exe फ़ाइल के अलावा, आपको अक्सर एक प्रोग्राम चलाने के लिए डीएलएल जैसी फ़ाइल की आवश्यकता होगी। आप कई फ़ाइलें और कार्यक्रम वितरित करेंगे।

अब आप .NET कोर 3.0 से जोड़े गए "सिंगल फ़ाइल बनाएं" सुविधा का उपयोग करके कार्यक्रम प्रकाशित करके सभी फ़ाइलों को एक exe में चला सकते हैं। (पीडीबी फाइल एक डिबग जानकारी फ़ाइल है, इसलिए आपको इसे वितरित करने की आवश्यकता नहीं है।

हालांकि, कुछ मामलों में, आप इसे 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 नहीं है, इसलिए आपको एक त्रुटि मिलेगी।

किसी भी फ़ाइल को एक ही फ़ाइल में शामिल किए बिना किसी विशिष्ट फ़ाइल को कैसे प्रकाशित करें

प्रोजेक्ट फाइल (सीसप्रोज) को उस फाइल के साथ कोड में खोलें जिसे आप प्रोजेक्ट में शामिल नहीं करना चाहते हैं।

मुझे लगता है कि यह इस तरह 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>

जब आपको फ़ाइल मिलती है, तो इस प्रकार सत्य के साथ बाहर से शामिल करें: जैसा कि नाम का तात्पर्य है, इसे एक ही फ़ाइल से बाहर रखा गया है।

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

एक बार सहेजने के बाद प्रकाशित करने का प्रयास करें। आप देख सकते हैं कि यह एक ही फ़ाइल से प्रकाशित किया गया है।

आप अभी भी प्रकाशित फ़ाइल को यह सत्यापित करने के लिए चला सकते हैं कि यह सही ढंग से काम कर रहा है।