.NET ফ্রেমওয়ার্কের কোন সংস্করণ একটি এক্সিকিউটেবল চালানো দরকার?


98

আমি একটি এক্সিকিউটেবল ফাইল পেয়েছি এবং আমি জানতে চাই এই ফাইলটি .NET ফ্রেমওয়ার্কটির কোন সংস্করণ শুরু করা দরকার।

কোথাও কোথাও এই তথ্য সন্ধান করার সহজ উপায় আছে?

(এখনও অবধি আমি কোনও ভাগ্য ছাড়াই ILDASM এবং DUMPBIN চেষ্টা করেছি ।)



ডকস.মাইক্রোসফট.ইন- ইউএস / সিসিনটার্নালস / ডাউনলোডস - প্রক্রিয়া এক্সপ্লোরার এটি খুব ভাল এবং সহজেই ব্যবহার করতে পারে, কেবল এটি অ্যাডমিন হিসাবে চালান
অ্যাকোয়াএলেক্স

উত্তর:


55

আমি মনে করি আপনি নির্ভরযোগ্যভাবে পেতে পারেন নিকটতম সিএলআর এর কোন সংস্করণ প্রয়োজন তা নির্ধারণ করা । আপনি এটি করতে পারেন আইএলডিএএসএম ব্যবহার করে এবং "ম্যানিফয়েস্ট" নোড বা রিফ্লেক্টর এবং আইএল হিসাবে "অ্যাপ্লিকেশন.এক্সে" নোডের বিচ্ছিন্ন দর্শনটি দেখে। উভয় ক্ষেত্রেই একটি মন্তব্য রয়েছে যা সিএলআর সংস্করণকে নির্দেশ করে। আইএলডিএএসএম-তে, মন্তব্যটি "// মেটাডাটা সংস্করণ" এবং রিফ্লেক্টরে মন্তব্যটি "টার্গেট রানটাইম সংস্করণ"।

উইন্ডোজফর্মস অ্যাপ্লিকেশন 1.exe নামে একটি নেট নেটফোর্স অ্যাপ্লিকেশনটির উদাহরণ এখানে রয়েছে:

ILDASM:

// Metadata version: v2.0.50727
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly extern System
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}

প্রতিফলক:

.module WindowsFormsApplication1.exe
.subsystem 0x0002
// MVID: {CA3D2090-16C5-4899-953E-4736D6BC0FA8}
// Target Runtime Version: v2.0.50727

আপনি রেফারেন্সড অ্যাসেমব্লির তালিকাটিও দেখতে পারেন এবং সর্বোচ্চ সংস্করণ নম্বর সহ রেফারেন্সটি সন্ধান করতে পারেন।

আবার, ILDASM ব্যবহার করে "MANIFEST" নোড ডেটাটি দেখছেন:

.assembly extern System.Drawing
{
  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
  .ver 2:0:0:0
}
.assembly extern System.Core
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 3:5:0:0
}

এবং প্রতিফলক ব্যবহার করে তালিকাভুক্ত প্রতিটি রেফারেন্সের জন্য বিচ্ছিন্নভাবে (এখনও আইএল হিসাবে) তাকানো:

.assembly extern System.Core
{
    .ver 3:5:0:0
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}

সর্বাধিক সংস্করণ মেটাডেটা সহ রেফারেন্সটি সন্ধান করে আপনি ফ্রেমওয়ার্কের কোন সংস্করণটি রেফারেন্স থেকে এসেছে তা নির্ধারণ করতে পারেন, এটি নির্দেশ করবে যে অ্যাপ্লিকেশনটি চালানোর জন্য আপনার ফ্রেমওয়ার্কের একই সংস্করণ ইনস্টল করা দরকার। বলা হচ্ছে, আমি এটিকে 100% নির্ভরযোগ্য হিসাবে বিবেচনা করব না, তবে খুব শীঘ্রই এটি যে কোনও সময় পরিবর্তিত হবে বলে আমি মনে করি না।


4
দুর্ভাগ্যক্রমে মাইক্রোসফ্ট উপরের কৌশলটির জন্য একটি ব্রেকিং প্রবর্তন করে। .NET 4.5 টি অ্যাসেমব্লিগুলি কাঁচা। নেট 4 এ চলতে পারে না এবং একটি .NET 4.5 এ্যাসেম্বলি বলতে আপনার সিস্টেম.আরুনটাইম.ভিশনেশন.টারাগেট ফ্রেমওয়ার্ক অ্যাট্রিবিউট পড়তে হবে। lextm.com/2013/02/how-to-tell-net-45-only-assemblies.html
Lex Li

58

ব্যবহার নোটপ্যাড , তিন দশক বয়সী, আকার 200kb, আগে থেকেই ইনস্টল করা টুল:

  • এর সাথে অ্যাপ্লিকেশন খুলুন notepad appname.exe,
  • "ফ্রেমওয়ার্ক" শব্দটি অনুসন্ধান করুন
  • সঙ্গে অন্তিম অনুসন্ধান পুনরাবৃত্তি করুন F3যতক্ষণ না .NET Framework,version=vX.Yশো আপ
  • যদি কিছু না পাওয়া যায় (3.0 এর নীচে সংস্করণগুলি) সন্ধান করুন v2.... এখনও 100 গুণ সহজ তবে ডট নেট বিশ্লেষক সরঞ্জাম এবং আবর্জনা স্টুডিওগুলির গিগা বাইট ইনস্টল করা।

অন্য যে কোন সম্পাদক / ভিউয়ার নোটপ্যাড ++ অথবা totalCommander এর মহান টেক্সট / হেক্স দর্শকদের মতো সহজেই বাইনেরিতে খুলতে পারেন, লিস্টার


এটি দুর্দান্ত - বিশেষত আপনার যদি ডিকম্পাইল / অন্যান্য সরঞ্জামগুলিতে অ্যাক্সেস না রাখেন
ক্রেগ

@ বেন্ট ট্রানবার্গ আকর্ষণীয়, আপনি কি কোনওভাবে আমাকে এক্সেল প্রেরণ করতে পারেন, জিমেইল কম এ অ্যাসেনপ করুন।
আসাইন কুজোভিচ


22

আপনি এখন একটি সমাবেশের লক্ষ্য কাঠামো পরীক্ষা করতে ILSpy ব্যবহার করতে পারেন । সমাবেশ লোড করার পরে, অ্যাসেম্বলি নোডের মূলটিতে ক্লিক করুন, এবং আপনি টার্গেটফ্রেমওয়ার্ক ঘোষণার অধীনে তথ্যটি পেতে পারেন:

[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]

4
নোট করুন যে টার্গেটফ্রেমওয়ার্কঅ্যাট্রিবিউটটি কেবল নেট নেট 4.0.০ এ যুক্ত হয়েছিল, সুতরাং। নেট ৩.৫ বা তার আগের সংকলিত সমাবেশগুলিতে উপস্থিত হবে না।
ওয়াই হা লি

আইএলএসপি লোড এসেম্বলি রুট নোড ক্লিক করার সময় মন্তব্যে "রানটাইম: ভিএক্সএক্সএক্সএক্স" দেখায়। আমি একটি v1.1.4322 ফ্রেমওয়ার্ক প্রকল্প দেখতে সক্ষম হয়েছি।
ryancdotnet

15

কোড থেকে আপনি ব্যবহার করতে পারেন Assembly.ImageRuntimeVersion তবে ফাইলটি দেখে সম্ভবত সবচেয়ে ভাল কাজটি mscorlibহ'ল প্রতিফলক ব্যবহার করা এবং কোন সংস্করণটি রেফারেন্স করা হচ্ছে তা দেখুন।

সম্পাদনা করুন: ইল্ডাস্ম ব্যবহার করা , আপনার সমাবেশটি খোলা এবং তারপরে সমাবেশের জন্য ম্যানিফেস্টটি দেখার চেয়ে আরও ভাল। ম্যানিফেস্টের প্রথম লাইনটি আপনার পক্ষে সিএলআর- এর সঠিক সংস্করণটি জানাবে যে সমাবেশটি নির্মিত হয়েছিল।


4
এটা ভুল. ওপিতে .NET ফ্রেমওয়ার্কের সংস্করণ সম্পর্কে জিজ্ঞাসা করা হয়েছে, সিএলআর রানটাইমের সংস্করণ নয়। এই উত্তরটি উত্তরকে সম্বোধন করে। উদাহরণ হিসাবে, আমি ফ্রেমওয়ার্ক 4.7.2531.0 এর বিরুদ্ধে যাচ্ছি যা সিএলআর রানটাইম সংস্করণ 4.0.30139 ব্যবহার করে। ইমেজরুনটাইম সংস্করণ ফ্রেমওয়ার্ক সংস্করণ নয়, সিএলআর সংস্করণ দেয়।
টম


11

আপনি CorFlags.exe নামে একটি সরঞ্জাম ব্যবহার করতে পারেন। .NET 2.0 থেকে এটি প্রায় হয়েছে, এবং আমি নিশ্চিতভাবে জানি যে এটি উইন্ডোজ এসডিকে 7.0 এর অন্তর্ভুক্ত রয়েছে। ডিফল্টরূপে (উইন্ডোজ এক্সপি প্রোতে) এটি সি: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট এসডিকে \ উইন্ডোজ \ v7.0A \ বিন \ CorFlags.exe এ ইনস্টল করা হয়। ভার্সন অন্তর্ভুক্ত এর শিরোনাম তথ্য প্রদর্শনের জন্য এটিকে কোনও পরিচালিত মডিউল (অন্য কোনও কমান্ড-লাইন পতাকা ছাড়া) ফাইলের পথটি সরবরাহ করুন।

মনে রাখবেন যে এই ইউটিলিটিটি মডিউলটির PE32 শিরোনাম সংশোধন করার জন্য ডিজাইন করা হয়েছে, সুতরাং আপনি ডকুমেন্টেশন সাবধানে না পড়া পর্যন্ত কোনও পতাকা ব্যবহার করবেন না ।


4
নেট 4 এবং। নেট 4.5 এর মধ্যে পার্থক্য করা যাবে না
মহিমান

3

আপনি উইন্ডোতে পাওয়ারশেল ব্যবহার করে কোনও ফাইলের .NET সংস্করণটি পেতে পারেন। নিম্নলিখিত লিপি;

$path=’.\’
$ErrorActionPreference = "SilentlyContinue"
$files=Get-ChildItem -Path $path -Recurse -include *.dll,*.exe
foreach($file in $files)
{
    $filename = $file.BaseName
    $version = $([System.Reflection.Assembly]::ReflectionOnlyLoadFrom($file.FullName).GetCustomAttributesData() |
                 select-object -ExpandProperty ConstructorArguments | 
                 select-object -ExpandProperty Value | 
                 select-string -Pattern '.NET')
    Write-Output "$filename,$version"
}

নিম্নলিখিত ফলাফল সরবরাহ করে; এখানে চিত্র বর্ণনা লিখুন

নোট করুন যে ফলাফলটি folder ফোল্ডারে EXE ফাইলগুলির জন্য .NET সংস্করণটি বের করেছে, তবে এটি একটি dll এর জন্যও করবে।


2

অথবা আপনি কেবল সিস্টেমের কোন রেফারেন্সটি খুঁজে পেতে পারেন। এটিতে কোর ore এটি আপনাকে এই অ্যাপটি ব্যবহার করছে। নেট ফ্রেমওয়ার্ক সংস্করণটি বলবে। 2.0 এর জন্য সিস্টেম.কোরের সংস্করণটি 2.0.xxx.xxx হবে। 3.5 এর জন্য সংস্করণটি 3.5.xxx.xxx ইত্যাদি হবে


আমি এটা সত্য মনে করি না। আমি 4.5 লক্ষ্য ফ্রেমওয়ার্ক আছে কিন্তু System.Core 4.0.XXX.XXX ব্যবহার
পল Totzke

1

লিনাক্স / ওএসএক্স / ইউনিক্সে আপনি এটি ব্যবহার করতে পারেন:

strings that_app.exe | grep 'v2.\|Framework'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.