আমি একটি এক্সিকিউটেবল ফাইল পেয়েছি এবং আমি জানতে চাই এই ফাইলটি .NET ফ্রেমওয়ার্কটির কোন সংস্করণ শুরু করা দরকার।
কোথাও কোথাও এই তথ্য সন্ধান করার সহজ উপায় আছে?
(এখনও অবধি আমি কোনও ভাগ্য ছাড়াই ILDASM এবং DUMPBIN চেষ্টা করেছি ।)
উত্তর:
আমি মনে করি আপনি নির্ভরযোগ্যভাবে পেতে পারেন নিকটতম সিএলআর এর কোন সংস্করণ প্রয়োজন তা নির্ধারণ করা । আপনি এটি করতে পারেন আইএলডিএএসএম ব্যবহার করে এবং "ম্যানিফয়েস্ট" নোড বা রিফ্লেক্টর এবং আইএল হিসাবে "অ্যাপ্লিকেশন.এক্সে" নোডের বিচ্ছিন্ন দর্শনটি দেখে। উভয় ক্ষেত্রেই একটি মন্তব্য রয়েছে যা সিএলআর সংস্করণকে নির্দেশ করে। আইএলডিএএসএম-তে, মন্তব্যটি "// মেটাডাটা সংস্করণ" এবং রিফ্লেক্টরে মন্তব্যটি "টার্গেট রানটাইম সংস্করণ"।
উইন্ডোজফর্মস অ্যাপ্লিকেশন 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% নির্ভরযোগ্য হিসাবে বিবেচনা করব না, তবে খুব শীঘ্রই এটি যে কোনও সময় পরিবর্তিত হবে বলে আমি মনে করি না।
ব্যবহার নোটপ্যাড , তিন দশক বয়সী, আকার 200kb, আগে থেকেই ইনস্টল করা টুল:
notepad appname.exe
, F3
যতক্ষণ না .NET Framework,version=vX.Y
শো আপv2.
... এখনও 100 গুণ সহজ তবে ডট নেট বিশ্লেষক সরঞ্জাম এবং আবর্জনা স্টুডিওগুলির গিগা বাইট ইনস্টল করা।অন্য যে কোন সম্পাদক / ভিউয়ার নোটপ্যাড ++ অথবা totalCommander এর মহান টেক্সট / হেক্স দর্শকদের মতো সহজেই বাইনেরিতে খুলতে পারেন, লিস্টার ।
আরও সরল পদ্ধতিতে ডটপিক ব্যবহার করা এবং গাছে কী প্রদর্শিত হবে তা দেখা।
আপনি এখন একটি সমাবেশের লক্ষ্য কাঠামো পরীক্ষা করতে ILSpy ব্যবহার করতে পারেন । সমাবেশ লোড করার পরে, অ্যাসেম্বলি নোডের মূলটিতে ক্লিক করুন, এবং আপনি টার্গেটফ্রেমওয়ার্ক ঘোষণার অধীনে তথ্যটি পেতে পারেন:
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
কোড থেকে আপনি ব্যবহার করতে পারেন Assembly.ImageRuntimeVersion
তবে ফাইলটি দেখে সম্ভবত সবচেয়ে ভাল কাজটি mscorlib
হ'ল প্রতিফলক ব্যবহার করা এবং কোন সংস্করণটি রেফারেন্স করা হচ্ছে তা দেখুন।
সম্পাদনা করুন: ইল্ডাস্ম ব্যবহার করা , আপনার সমাবেশটি খোলা এবং তারপরে সমাবেশের জন্য ম্যানিফেস্টটি দেখার চেয়ে আরও ভাল। ম্যানিফেস্টের প্রথম লাইনটি আপনার পক্ষে সিএলআর- এর সঠিক সংস্করণটি জানাবে যে সমাবেশটি নির্মিত হয়েছিল।
আপনি CorFlags.exe নামে একটি সরঞ্জাম ব্যবহার করতে পারেন। .NET 2.0 থেকে এটি প্রায় হয়েছে, এবং আমি নিশ্চিতভাবে জানি যে এটি উইন্ডোজ এসডিকে 7.0 এর অন্তর্ভুক্ত রয়েছে। ডিফল্টরূপে (উইন্ডোজ এক্সপি প্রোতে) এটি সি: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট এসডিকে \ উইন্ডোজ \ v7.0A \ বিন \ CorFlags.exe এ ইনস্টল করা হয়। ভার্সন অন্তর্ভুক্ত এর শিরোনাম তথ্য প্রদর্শনের জন্য এটিকে কোনও পরিচালিত মডিউল (অন্য কোনও কমান্ড-লাইন পতাকা ছাড়া) ফাইলের পথটি সরবরাহ করুন।
মনে রাখবেন যে এই ইউটিলিটিটি মডিউলটির PE32 শিরোনাম সংশোধন করার জন্য ডিজাইন করা হয়েছে, সুতরাং আপনি ডকুমেন্টেশন সাবধানে না পড়া পর্যন্ত কোনও পতাকা ব্যবহার করবেন না ।
আপনি উইন্ডোতে পাওয়ারশেল ব্যবহার করে কোনও ফাইলের .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 এর জন্যও করবে।
অথবা আপনি কেবল সিস্টেমের কোন রেফারেন্সটি খুঁজে পেতে পারেন। এটিতে কোর ore এটি আপনাকে এই অ্যাপটি ব্যবহার করছে। নেট ফ্রেমওয়ার্ক সংস্করণটি বলবে। 2.0 এর জন্য সিস্টেম.কোরের সংস্করণটি 2.0.xxx.xxx হবে। 3.5 এর জন্য সংস্করণটি 3.5.xxx.xxx ইত্যাদি হবে