একটি EXE আউটপুট করতে .NET কোর কনসোল অ্যাপ্লিকেশন তৈরি করুন


413

.NET কোর 1.0 কে লক্ষ্য করে একটি কনসোল অ্যাপ্লিকেশন প্রকল্পের জন্য, বিল্ড চলাকালীন কীভাবে আউটপুট থেকে .exe পাবেন তা আমি বুঝতে পারি না। প্রকল্পটি ডিবাগে সূক্ষ্মভাবে চলে।

আমি প্রকল্পটি প্রকাশের চেষ্টা করেছি, তবে এটিও কার্যকর হয় না। এটি বোঝা যায় যেহেতু একটি EXE ফাইল প্ল্যাটফর্ম-নির্দিষ্ট হবে, তবে অবশ্যই একটি উপায় থাকতে হবে। আমার অনুসন্ধানগুলি কেবল প্রজেক্ট.জসন ব্যবহার করে এমন পুরানো .NET কোর সংস্করণগুলির রেফারেন্স তৈরি করেছে।

আমি যখনই নির্মাণ বা প্রকাশ করি, এটিই আমি পাই:

ডিরেক্টরি নির্মাণ করুন



2
@ জিইকজস্টার দয়া করে মুছে ফেলুন - আমি জানি আপনি ওপি প্রশ্নের উত্তর দেন নি, তবে আপনি আমার উত্তর দিয়েছিলেন, এবং আমি সন্দেহ করে অন্য অনেকের কথা বলে dotnet <path>.dll(আমি dotnet run <path>.dllস্পষ্ট কারণেই সাফল্য ছাড়া ভাবছিলাম না এবং টাইপ করছিলাম না )! (প্রতিচ্ছবিতে এটি ভাল হবে যদি এটি অন্য প্রশ্নের পক্ষে বন্ধ হয়ে যায় যার উত্তরগুলির অনুরূপ সেট রয়েছে)
রুবেন বারটেলিংক

উত্তর:


480

ডিবাগিংয়ের উদ্দেশ্যে, আপনি ডিএলএল ফাইলটি ব্যবহার করতে পারেন। আপনি এটি ব্যবহার করে চালাতে পারেন dotnet ConsoleApp2.dll। আপনি যদি একটি EXE ফাইল উত্পন্ন করতে চান তবে আপনাকে একটি স্ব-অন্তর্ভুক্ত অ্যাপ্লিকেশন তৈরি করতে হবে।

একটি স্ব-অন্তর্ভুক্ত অ্যাপ্লিকেশন তৈরি করতে (উইন্ডোজ এ এক্সই) আপনার অবশ্যই লক্ষ্য রানটাইম নির্দিষ্ট করতে হবে (যা আপনি লক্ষ্য করে অপারেটিং সিস্টেমের সাথে নির্দিষ্ট)।

প্রাক-নেট নেট 2.0 কেবল : প্রথমে .csproj ফাইলে লক্ষ্যযুক্ত রানটাইমগুলির রানটাইম সনাক্তকারী যুক্ত করুন ( সমর্থিত আরআইডিগুলির তালিকা ):

<PropertyGroup>
    <RuntimeIdentifiers>win10-x64;ubuntu.16.10-x64</RuntimeIdentifiers>
</PropertyGroup>

উপরের পদক্ষেপটি আর .NET কোর 2.0 দিয়ে শুরু করার দরকার নেই

তারপরে, আপনি যখন আপনার অ্যাপ্লিকেশন প্রকাশ করবেন তখন কাঙ্ক্ষিত রানটাইম সেট করুন:

dotnet publish -c Release -r win10-x64
dotnet publish -c Release -r ubuntu.16.10-x64

15
আমি মনে করি এটি কেবল সিএলআইয়ের মাধ্যমেই করা যেতে পারে। RuntimeIdentifierবিটিডাব্লু,। নেট কোর 2 দিয়ে শুরু করে, আপনাকে সিএসপিজেজে সেট করার দরকার নেই।
meziantou

26
.NET কোর 2.0 এর জন্য কি ভিজ্যুয়াল স্টুডিওতে এটি করা যেতে পারে? নাকি আমার হাতে এই কমান্ডগুলি টাইপ করতে হবে?
টমাসজ সিকোড়া

77
একটি হ্যালো ওয়ার্ল্ড কনসোল অ্যাপ্লিকেশনটির জন্য 60MB এরও বেশি!
shox

13
@ মিকোলাজ কেবলমাত্র একটি লক্ষ্য রানটাইম "পোর্টেবল" রয়েছে। সমস্ত লক্ষ্যমাত্রা আনার উপায় আছে কি? কমান্ড লাইনটি ব্যবহার করার জন্য আমি ঠিক আছি, তবে মনে করুন এটি পিছিয়ে গেছে back
gsharp

10
এটি একক কার্যকর কার্যকর করতে পারে না। এটি অন্যান্য ফাইলের হোস্টের সাথে একটি এক্সিকিউটেবল তৈরি করে (রিলিজ ফোল্ডারে আমার অর্থ)। তাদের নিজস্ব ফাইল সহ কিছু সাবফোল্ডার অন্তর্ভুক্ত। সত্যিকারের একক কার্যকর কার্যকর করার কোনও উপায় আছে কি ?
ম্যাথু

121

আপডেট (31-OCT-2019)

যে কেউ জিইউআইয়ের মাধ্যমে এটি করতে চায় এবং তার জন্য:

  • ভিজ্যুয়াল স্টুডিও 2019 ব্যবহার করছে
  • .NET কোর 3.0 ইনস্টল করা আছে (ভিজ্যুয়াল স্টুডিও 2019 এর সর্বশেষ সংস্করণে অন্তর্ভুক্ত)
  • একটি একক ফাইল তৈরি করতে চায়

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বিবরণ লিখুন

বিঃদ্রঃ

এই জাতীয় একটি ছোট অ্যাপ্লিকেশন জন্য বড় ফাইল আকার লক্ষ্য করুন

এখানে চিত্র বিবরণ লিখুন

আপনি "প্রকাশিত ছাঁটাই" সম্পত্তি যুক্ত করতে পারেন। অ্যাপ্লিকেশনটিতে কেবলমাত্র সেই উপাদানগুলি অন্তর্ভুক্ত থাকবে যা অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয়। সতর্কতা : আপনি যদি প্রতিবিম্ব ব্যবহার করছেন তবে এটি করবেন না

এখানে চিত্র বিবরণ লিখুন

আবার প্রকাশ করুন

এখানে চিত্র বিবরণ লিখুন


পূর্ববর্তী পোস্ট

যে কেউ ভিজুয়াল স্টুডিও ব্যবহার করছে এবং জিইউআইয়ের মাধ্যমে এটি করতে চায়, নীচের পদক্ষেপগুলি দেখুন:

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন

এখানে চিত্র বিবরণ লিখুন


19
খুব খারাপ ফলাফল আউটপুট হ'ল পুরানো। নেট ফ্রেমওয়ার্কের মতো কেবল একটি এক্সই নয় files
টমাস কার্বন

2
@ টমাস কারবান - আমি অবধি মোড়কে "স্ব-অন্তর্নিহিত" হিসাবে পরিবর্তন না করা পর্যন্ত ঘটনাটি ছিল পরিবর্তনের পরে এক্সেল ফাইলটি প্রকাশের ফোল্ডারেও উপস্থিত হয়েছিল :-)
মারিউজ

@ টমাসকার্বান। নেট কোর কোনও সাধারণ উদ্দেশ্য রানটাইম নয়। এটি বিশেষত ১) মেঘ / ধারক মোতায়েন, 2) মাল্টি-প্ল্যাটফর্মের জন্য ডিজাইন করা হয়েছে। এটি অস্থায়ী হওয়ার জন্যও বোঝানো হয়েছিল - .NET- কে সমস্ত ওপেন সোর্স না করা পর্যন্ত এটি কেবল একটি "দ্রুত" হ্যাক। .NET 5.0 পরবর্তী সাধারণ উদ্দেশ্য হতে চলেছে। নেট।
লুয়ান

3
তবুও, এটি হাস্যকর যে আপনি .NET কোর লক্ষ্য করে যখন .NET এর জন্য আইডিই সর্বাধিক প্রাথমিক কার্যকারিতা সমর্থন করে না। এবং এটাই প্রত্যেককে ক্রস-প্ল্যাটফর্ম কমান্ড লাইন অ্যাপ্লিকেশনগুলি তৈরি করতে লক্ষ্য করতে হবে - বলুন, একটি সংকলক।
মনিকা

18

নিম্নলিখিত আউটপুট ডিরেক্টরিতে উত্পাদন করবে,

  • সমস্ত প্যাকেজ রেফারেন্স
  • আউটপুট সমাবেশ
  • বুটস্ট্র্যাপিং উদাহরণ

তবে এতে সমস্ত .NET কোর রানটাইম সমাবেশগুলি থাকে না।

<PropertyGroup>
  <Temp>$(SolutionDir)\packaging\</Temp>
</PropertyGroup>

<ItemGroup>
  <BootStrapFiles Include="$(Temp)hostpolicy.dll;$(Temp)$(ProjectName).exe;$(Temp)hostfxr.dll;"/>
</ItemGroup>

<Target Name="GenerateNetcoreExe"
        AfterTargets="Build"
        Condition="'$(IsNestedBuild)' != 'true'">
  <RemoveDir Directories="$(Temp)" />
  <Exec
    ConsoleToMSBuild="true"
    Command="dotnet build $(ProjectPath) -r win-x64 /p:CopyLocalLockFileAssemblies=false;IsNestedBuild=true --output $(Temp)" >
    <Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
  </Exec>
  <Copy
    SourceFiles="@(BootStrapFiles)"
    DestinationFolder="$(OutputPath)"
  />

</Target>

আমি এটি এখানে একটি নমুনায় জড়িয়েছি: https://github.com/SimonCropp/NETCoreConsole


আমার গ ($ টেম্প) তবে পয়েন্ট: \ ব্যবহারকারীরা \ XXX \ AppData \ স্থানীয় \ টেম্প যা স্পষ্টত সরানো যাবে না / পরিষ্কার - না এটা তা করার adviceable হয়
Adaptabi

1
@ অ্যাডপতবী টেম্প স্ক্রিপ্টের শুরুতে একটি সম্পত্তি হিসাবে সংজ্ঞায়িত হয়েছে
সাইমন

2

যদি .bat ফাইলটি গ্রহণযোগ্য হয়, আপনি ডিএলএল ফাইলের মতো একই নাম দিয়ে একটি ব্যাট ফাইল তৈরি করতে পারেন (এবং এটি একই ফোল্ডারে রেখে দিতে পারেন), তারপরে নিম্নলিখিত বিষয়বস্তুতে পেস্ট করুন:

dotnet %~n0.dll %*

স্পষ্টতই, এটি ধরে নেয় যে মেশিনে .NET কোর ইনস্টল করা হয়েছে এবং বিশ্বব্যাপী উপলব্ধ।

c:\> "path\to\batch\file" -args blah

(এই উত্তরটি চেটের মন্তব্য থেকে প্রাপ্ত ))


0

এখানে আমার হ্যাকি কাজের মত - একটি কনসোল অ্যাপ্লিকেশন তৈরি করুন (। নেট ফ্রেমওয়ার্ক) যা এর নিজস্ব নাম এবং তর্কগুলি পড়ে এবং তারপরে কল করে dotnet [nameOfExe].dll [args]

অবশ্যই এটি ধরে নিয়েছে যে .NET টার্গেট মেশিনে ইনস্টল করা আছে।

এখানে কোড। অনুলিপি কপি!

using System;
using System.Diagnostics;
using System.Text;

namespace dotNetLauncher
{
    class Program
    {
        /*
            If you make .NET Core applications, they have to be launched like .NET blah.dll args here
            This is a convenience EXE file that launches .NET Core applications via name.exe
            Just rename the output exe to the name of the .NET Core DLL file you wish to launch
        */
        static void Main(string[] args)
        {
            var exePath = AppDomain.CurrentDomain.BaseDirectory;
            var exeName = AppDomain.CurrentDomain.FriendlyName;
            var assemblyName = exeName.Substring(0, exeName.Length - 4);
            StringBuilder passInArgs = new StringBuilder();
            foreach(var arg in args)
            {
                bool needsSurroundingQuotes = false;
                if (arg.Contains(" ") || arg.Contains("\""))
                {
                    passInArgs.Append("\"");
                    needsSurroundingQuotes = true;
                }
                passInArgs.Append(arg.Replace("\"","\"\""));
                if (needsSurroundingQuotes)
                {
                    passInArgs.Append("\"");
                }

                passInArgs.Append(" ");
            }
            string callingArgs = $"\"{exePath}{assemblyName}.dll\" {passInArgs.ToString().Trim()}";

            var p = new Process
            {
                StartInfo = new ProcessStartInfo("dotnet", callingArgs)
                {
                    UseShellExecute = false
                }
            };

            p.Start();
            p.WaitForExit();
        }
    }
}

6
যদি আপনি যাইহোক কোনও অতিরিক্ত ফাইল পেতে চলেছেন তবে কেন কেবল এমন একটি ব্যাট ফাইল তৈরি করবেন নাdotnet [nameOfExe].dll %*
চিত
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.