DL এর জন্য .NET ফ্রেমওয়ার্ক সংস্করণ নির্ধারণ করুন


137

আমার একটি পুরাতন dll রয়েছে যা .NET কাঠামোর বিরুদ্ধে সংকলিত এবং মোতায়েন করা হয়েছিল। .NET কাঠামোর কোন সংস্করণটি এর বিপরীতে সংকলিত হয়েছিল তা আমি নিশ্চিত নই। আমি ভাবছি যে আমি কীভাবে নির্ধারণ করতে পারি NET ফ্রেমওয়ার্কটির কোন সংস্করণটি এই dll এর বিপরীতে সংকলিত হয়েছিল? আমি উত্স কোডটিতে বিশ্বাস করতে পারি না কারণ আমি বিশ্বাস করি এটি ভিজ্যুয়াল স্টুডিও ২০০৮ এ উন্নীত হয়েছে এবং .NET ফ্রেমওয়ার্ক সংস্করণ 3.5 তে পরিবর্তিত হয়েছে।


উত্তর:


49

এটি রিফ্লেক্টরে লোড করুন এবং দেখুন এটি কী রেফারেন্স করে?

উদাহরণ স্বরূপ:

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


1
আমার ধারণাটিও, তবে প্রতিচ্ছবিটি জেনে এটি সম্ভবত অভিযোগ করবে এবং এটিকে একটি দুর্দান্ত নন-ডিসক্রিপ্ট ত্রুটি আইকন দেবে।
লেপি

@ লেপ্পির সমস্যা হওয়া উচিত নয়, এমনকি এটি নেট 1.1। কেবল আপনার ডিফল্ট অ্যাসেম্বলি তালিকা পরিবর্তন করুন।
পরমেশান কোডিস

আপনার উত্তরটি খুব সহায়ক, তবে আমি এটি অন্ধভাবে নির্ভর না করার পরামর্শ দিচ্ছি - গতকাল আমি নিজের প্রকল্পে অনেক বেশি সময় ব্যয় করেছি যা। নেট 4.0.০ এর জন্য লক্ষ্যযুক্ত হয়েছিল, নেট ব্যবহার করার জন্য রিফ্লেক্টর দ্বারা রিপোর্ট করেছেন নেট 4.0.০.৩, এবং ব্যবহারের প্রয়োজন উইন্ডোজ দ্বারা নেট 4.5 :-) আমি উৎসের সঙ্গে ছাড়া অন্য প্রকল্পে এই যাচাই করতে কোন পদ্ধতি জানি না - এখানে দেখুন: stackoverflow.com/questions/13214503/...
greenoldman

3
আপনি বিনামূল্যে, ওপেন-সোর্স বিকল্প আইএলএসপি ব্যবহার করতে পারেন যেমন ক্যাট লিম রুইজ উল্লেখ করেছেন।
মার্কাস ম্যানগেলসডর্ফ

এই উত্তরটি আমার পক্ষে কাজ করেছে: stackoverflow.com/a/3461027/2961177
ckkkitty

128

পাওয়ারশেলে আপনি লক্ষ্য রানটাইম পেতে নিম্নলিখিত ব্যবহার করতে পারেন:

$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion

বেন গ্রিসওয়ালের উত্তর থেকে আমি পাওয়ারশেলের সাথে এটি অভিযোজিত করেছি ।

আপনি যদি ভিজ্যুয়াল স্টুডিওতে নির্দিষ্ট লক্ষ্য কাঠামোর সংস্করণটি জানতে চান তবে ব্যবহার করুন:

$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).CustomAttributes |
Where-Object {$_.AttributeType.Name -eq "TargetFrameworkAttribute" } | 
Select-Object -ExpandProperty ConstructorArguments | 
Select-Object -ExpandProperty value

আপনার মতো কিছু পাওয়া উচিত

.NETFramework, সংস্করণ = v4.5.2


4
এই উত্তরটি সবচেয়ে সহায়ক। 2003 এর পরে সমস্ত উইন্ডোজ ওএস পাওয়ারশেলকে সমর্থন করে। অন্যান্য শর্ট উত্তরগুলি যেমন পরামর্শ দেয় তেমন কোনও অতিরিক্ত অ্যাপ্লিকেশন সহায়তা প্রয়োজন হয় না, তাৎক্ষণিক প্রতিক্রিয়া সরবরাহকারী একটি শেল। একটি ডেল এর "ওয়ান অফ" চেকের জন্য দুর্দান্ত। আপনি মানুষটি @ সোগাগান
নাথান ম্যাককয় 11

1
আমি এটি ডিএলএল-এর জন্য করেছি আমি v3.5 এর টার্গেটফ্রেমওয়ার্ক সংস্করণ দিয়ে তৈরি করেছি এবং এটি v2.0.50727 এ ফিরে এসেছে। আমি কী মিস করছি?
বিএইচএসপিটমনকি

4
@ বিএইচএসপিটমনকি কেবল 4 রানটাইম সংস্করণ পেয়েছেন: 1.0, 1.1, 2.0 এবং 4.0। .NET 3.0 এবং 3.5 সিএলআর সংস্করণ 2.0 তে সংকলন করে। msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx
স্বুগান

1
এই স্ক্রিপ্টটি কেবল রানটাইম ভার্সন সরবরাহ করে, প্রশ্ন টার্গেটফ্রেমওয়ার্কটি সম্পর্কিত। 2.0,3.0,3.5 এর বিপরীতে সংকলিত সমস্ত অ্যাসেমব্লির জন্য কার্যকরভাবে এই স্ক্রিপ্টটি রানটাইম সংস্করণকে 2.0.0.0 হিসাবে দেখায়
কিরণ

3
আমার জন্য রিফ্লেকশনঅনল্লিডফ্রাম ইমেজরুনটাইম সংস্করণ কিন্তু শূন্য কাস্টমঅ্যাট্রিবিউটগুলি প্রদান করে। রিফ্লেকশনলিলিডএফের পরিবর্তে লোডফ্রম ব্যবহার করা প্রত্যাশিত ফলাফল দেয়। যে কোনো কারণে? PSVersion 5.1.16299.251 সিএলআর সংস্করণ 4.0.30319.42000
বার্নার্ড ভ্যান্ডার বেকেন

69

এই তথ্যটি দেখানোর জন্য ডটপিক একটি দুর্দান্ত (ফ্রি) সরঞ্জাম।

আপনার যদি রিফ্লেক্টরকে ধরে রাখতে কিছু সমস্যা হয় তবে এটি একটি ভাল বিকল্প।

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


4
এফওয়াইআই, আমি একটি ইস্যুর কারণে ডটপিক থেকে জাস্টডেকম্পাইলে স্যুইচ করেছি: আপনি যদি "নির্দিষ্ট সংস্করণ = মিথ্যা" নির্বাচন করেন তবে ডটপিক একটি খালি সংস্করণ দেখিয়েছে এবং জাস্টডেকম্পাইল সঠিক সংস্করণ দেখায়। আমার জন্য এটি স্যুইচিং মূল্যবান তৈরি।
ashes999

দুর্দান্ত - আমি রিফ্লেক্টরের জন্য একটি পরীক্ষা ইনস্টল না করে যা চেয়েছিলাম ঠিক তা-ই করেছে।
বার্নহারড্রেশ

49

আপনি ILDASM ব্যবহার করতে পারেন ...

ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil

এবং আউটপুটে 'মেটাডেটা বিভাগ' পরীক্ষা করুন। এটি এমন কিছু হবে:

মেটাডেটা বিভাগ: 0x424a5342, সংস্করণ: 1.1, অতিরিক্ত: 0, সংস্করণ লেন: 12, সংস্করণ: v4.0.30319

'সংস্করণ' ট্যাগ আপনাকে .NET ফ্রেমওয়ার্ক সংস্করণটি বলবে। উপরের উদাহরণে এটি 4.0.30319


3
আমি এখানে কি খুঁজছি? এর অর্থ কি। নেট 4.0? // Metadata section: 0x424a5342, version: 1.1, extra: 0, version len: 12, versio n: v4.0.30319
পিটারএক্স

হ্যাঁ, নেট 2 এর জন্য আমি নিম্নলিখিতগুলি পেয়েছি: // মেটাডেটা বিভাগ: 0x424a5342, সংস্করণ: 1.1, অতিরিক্ত: 0, সংস্করণ লেন: 12, সংস্করণ: v2.0.50727
সাইমন

17

আপনার কাছে কয়েকটি বিকল্প রয়েছে: পরিচালিত কোড থেকে প্রোগ্রামগতভাবে এটি পেতে, এসেম্বলি ব্যবহার করুন I ইমেজআরটাইমভিশন:

Dim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll")
Dim s As String = a.ImageRuntimeVersion

কমান্ড লাইন থেকে, v2.0-এ শুরু হওয়া, ildasm.exe এটি দেখায় যদি আপনি "ম্যানিফয়েস্ট" এ ডাবল ক্লিক করেন এবং "মেটাডেটা সংস্করণ" সন্ধান করেন। কোনও চিত্রের সিএলআর সংস্করণ নির্ধারণ করা হচ্ছে


কারেন্ট অ্যাপ্লিকেশন ডোমেনের জন্য কীভাবে ইমেজরুনটাইম সংস্করণ পাবেন?
কিকিনেট


15

কেবল সহজভাবে

var tar = (TargetFrameworkAttribute)Assembly
          .LoadFrom("yoursAssembly.dll")
          .GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();

1
আমি জানি না কেন এটি নিম্নোক্ত করা হয়েছে তবে আমি স্নিপেট চালাতে পারি (সিস্টেমের একটি রেফারেন্স। সংস্করণ = v4.0 ফ্রেমওয়ার্কডিপ্লে নাম, নেট ফ্রেমওয়ার্ক 4
সুধাংশু মিশ্র

এই কোডটি ফ্রেমওয়ার্কের পুরো সংস্করণটি পুনরুদ্ধার করে না। "4.0" জেনে রাখা ভাল তবে আপনি যদি RegAsm.exe এ যাওয়ার চেষ্টা করেন তবে "v4.0.30319" আরও কার্যকর হবে। আরও সম্পূর্ণ সংস্করণ তথ্য পাওয়া যাবে: স্ট্রিং টার = অ্যাসেমব্লিউড.ড্রোডফ্রোম (@ "মাইএএসব্যাশন.ডিল") Image চিত্ররুনটাইম সংস্করণ;
মার্টিন 15

এটি সঠিক পদ্ধতির মতো বলে মনে হচ্ছে, কোনও পরিস্থিতি কি এমন কোনও পরিস্থিতিতে রয়েছে যেখানে কোনও অ্যাসেম্বলি এই বৈশিষ্ট্যটি প্রয়োগ না করে থাকতে পারে? আমি এটি একটি নেট কোর অ্যাসেম্বলি দিয়ে পরীক্ষা করেছি এবং এটি নেটকোর এবং সংস্করণ নম্বরটি সঠিকভাবে রিপোর্ট করেছে।
অ্যাডাম নায়লার

এটি আমার পক্ষে কাজ করে না। GetCustomAttributesএকটি নেই TargetFrameworkAttribute। তবে ইমেজরুনটাইম ভার্সনটি ঠিকঠাক কাজ করে, এটি বাইনারিটি তৈরি করা হয়েছে এমন সঠিক সিএলআর পুনরুদ্ধার করে। আমার এটির জন্য লক্ষ্য কাঠামো সংস্করণ প্রয়োজন need
শামিল মোহাম্মদ

13

ভিজ্যুয়াল স্টুডিওর মাধ্যমে অন্য একটি বিকল্প, কোনও প্রকল্পে ডিএলএল-এর একটি রেফারেন্স যুক্ত করুন, তারপরে নতুন রেফারেন্সে ডান ক্লিক করুন এবং বৈশিষ্ট্যগুলি ক্লিক করুন, রানটাইম সংস্করণে আপনি যা খুঁজছেন তা দেখতে পাবেন:

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


আমি মনে করি ভিজুয়াল স্টুডিওতে কখন কোনও ডিএলএল রেফারেন্স করা হয় সে সম্পর্কে এই প্রশ্ন জিজ্ঞাসা করছে না, তবে যে কোনও ওল '। নেট ডিএলএল আপনি আপনার পিসিতে পড়ে আছেন find
ashes999

7
এই উত্তরটি ইঙ্গিত দেয় যে আপনি যে কোনও অল'এর জন্য একটি রেফারেন্স যুক্ত করতে পারবেন।
ALEXintlsos

8

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


4

সহজতম উপায়: যে কোনও পাঠ্য সম্পাদককে কেবল .dll খুলুন। শেষ লাইনের একটি দেখুন: এখানে চিত্র বর্ণনা লিখুন


সবার মধ্যে সেরা বিকল্প
সিসির

2
যাইহোক, এটি পূর্বে নির্মিত ঘরের জন্য কাজ করে না। নেট 3.0
সিসির

2

এটি করার জন্য আমি দ্রুত এই সি # কনসোল অ্যাপটি লিখেছিলাম:

https://github.com/stuartjsmith/binarydetailer

কেবলমাত্র একটি ডিরেক্টরিকে প্যারামিটার হিসাবে পাস করুন এবং এটি আপনাকে প্রতিটি ডিএল এর নেট ফ্রেমওয়ার্ক এবং সেখানে ই এক্সের জন্য যথাসাধ্য চেষ্টা করবে


ভাল বিস্তারিত তথ্য দেয়; এটি একটি কমান্ড-লাইন অ্যাপ্লিকেশন; কমান্ড-লাইনে আপনাকে ডিরেক্টরিটির নামটি দিতে হবে।
ফিলু

2

" সনাক্ত এটা সহজ " নামেও ডাই ফাইলের ধরনের নির্ধারণের জন্য একটি প্রোগ্রাম পরিচিত। .Dll ফাইল বা অন্যান্য (.exe) ফাইলগুলির সাথে কাজ করে। বাণিজ্যিক এবং অ-বাণিজ্যিক ব্যবহারের জন্য সম্পূর্ণ নিখরচায়।

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


0

যদি আপনার কাছে DotPeekথেকে থাকে তবে আপনি JetBrainsএটি দেখতে পাবেন Assembly Explorer

আপনি এই স্ক্রিনশট দেখতে পারেন?  আমি নই:(


0

এখানে উত্তরগুলি প্রসারিত করে, যদি কোনও নির্ভরশীল সমাবেশ হয় তবে এটি ফুঁসে উঠতে পারে। আপনি যদি ভাগ্যবান হন এবং আপনি জানেন যে নির্ভরশীল কোথায় (বা এমনকি ভাগ্যবান, এটি জিএসি তে রয়েছে) তবে এটি সাহায্য করতে পারে ...

using System.Reflection;
using System.Runtime.Versioning;
// ...
{
    AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
    var asm = System.Reflection.Assembly.LoadFrom(@"C:\Codez\My.dll");
    var targetFrameAttribute = asm.GetCustomAttributes(true).OfType<TargetFrameworkAttribute>().FirstOrDefault();
    targetFrameAttribute.Dump();
}

Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
    var name = args.Name;

    if (name.StartsWith("Depends"))
        return System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"C:\Codez\Depends.dll");

    return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}

তথ্যসূত্র: https://weblog.west-wind.com/posts/2006/Dec/22/Reflection-on-Problem- সংসদ

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