নেট অ্যাসেমব্লির পাবলিককি টোকেন পাচ্ছেন


163

কোনও অ্যাসেমব্লির পাবলিক-কী-টোকেন সন্ধান করার সহজ উপায় কী?

আমি যে সহজ উপায়টি ভাবতে পারি তা হ'ল একটি সাধারণ রাইট-ক্লিক হবে, পাবলিক কী পান, তবে এই কার্যকারিতাটি নেই, সম্ভবত এর জন্য কোনও ভিজ্যুয়াল স্টুডিও এক্সটেনশন আছে?

আমি কোনও এক্সটেনশন উপলব্ধ থাকলে ভিজ্যুয়াল স্টুডিও 2010 ব্যবহার করছি available


4
ভিজ্যুয়াল স্টুডিওর মধ্যে কীভাবে একটি সমাবেশের পাবলিককি টোকেন পাবেন কির্ক ইভান্সের এই ব্লগ পোস্টটি দেখুন: ব্লগস.এমএসএনএন / বি / কেভিনস / আর্কাইভ / ২০০৮/০6/১ //২০১ Mart
মার্টিন

2
সবেমাত্র ইএফ 6 ইনস্টল করা হয়েছে এবং সত্যই জানে না যে সমাবেশগুলি কোথায় অবস্থিত। এর মতো ক্র্যাপ করতে আমার দিনের কয়েক ঘন্টা সময় লাগে।
ফ্রগজিথেফ্রোগ

উত্তর:


228

একটি কমান্ড প্রম্পট খুলুন এবং আপনার ভিজ্যুয়াল স্টুডিও সংস্করণ এবং অপারেটিং সিস্টেম আর্কিটেকচার অনুযায়ী নিম্নলিখিত লাইনগুলির একটি টাইপ করুন:

ভিএস ২০০৮ 32 বিবিট উইন্ডোজে :

"%ProgramFiles%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>

ভিএস ২০০৮ 64৪ বিট উইন্ডোজে:

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v6.0A\bin\sn.exe" -T <assemblyname>

32 বিট উইন্ডোতে ভিএস 2010:

"%ProgramFiles%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>

64 বিট উইন্ডোজ ভিএস 2010:

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -T <assemblyname>

32 বিট উইন্ডোতে ভিএস 2012:

"%ProgramFiles%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>

64 বিট উইন্ডোজ ভিএস 2012:

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>

ভিএস 2015 64 বিট উইন্ডোজ এ:

"%ProgramFiles(x86)%\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe" -T <assemblyname>

নোট করুন যে VS2012 + সংস্করণগুলির জন্য, sn.exe অ্যাপ্লিকেশনটি আর বিনে নয়, একটি সাব-ফোল্ডারে রয়েছে। এছাড়াও, নোট করুন যে 64 বিটের জন্য আপনাকে (x86) ফোল্ডার নির্দিষ্ট করতে হবে।

আপনি যদি ভিজ্যুয়াল স্টুডিও কমান্ড প্রম্পট ব্যবহার করতে পছন্দ করেন তবে কেবল টাইপ করুন:

sn -T <assembly> 

<assemblyname>আপনার আগ্রহী এমন সমাবেশের পুরো ফাইল পাথটি কোথায় , যদি এর ফাঁকা স্থান থাকে তবে চারপাশে কোটগুলি বেষ্টিত।

আপনি এখানে ভিএসএস এ একটি বাহ্যিক সরঞ্জাম হিসাবে যুক্ত করতে পারেন:
http://blogs.msdn.com/b/miah/archive/2008/02/19/visual-studio-tip-get-public-key-token -for-এ-stong নামক-assembly.aspx


1
হ্যাঁ আমি জানি যে, আমি একটি সহজ উপায় খুঁজছি, পছন্দ করে ভিএস ছাড়াই
moi_meme

12
আপনি যদি 64৪-বিট মেশিনে থাকেন তবে% প্রোগ্রামফিল% কে% প্রোগ্রামফায়ালস (x86)% এর সাথে প্রতিস্থাপন করুন।
System.Cats.Lol

1
ভিএস ২০১২ এর জন্য এটি অন্তর্গত "%ProgramFiles(x86)%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe" -T <assemblyname>। নোট স্নেকে বিনের পরে একটি অতিরিক্ত ফোল্ডার স্তরে টিক দেওয়া হয় (এনইটিএফএক্স 4.0 সরঞ্জামগুলিতে)।
জিডিএস

2
সুন্দর উত্তর। VS2015 জন্য এটি% programfiles (এক্স 86)% \ মাইক্রোসফট SDK আছে \ উইন্ডোজ \ v10.0A \ বিন অধীনে হওয়া উচিত \ NETFX 4.6.1 সরঞ্জাম \ sn.exe
ThePatelGuy

1
VS2015 পথটি V10.0A হওয়া উচিত, V1.0A নয়
মাইকেল Itzoe

87

অন্য বিকল্প:

আপনি যদি পাওয়ারশেল ব্যবহার করেন তবে আপনি এটির মতো খুঁজে পেতে পারেন:

PS C:\Users\Pravat> ([system.reflection.assembly]::loadfile("C:\Program Files (x86)\MySQL\Connector NET 6.6.5\Assemblies\v4.0\MySql.Data.dll")).FullName

মত

PS C:\Users\Pravat> ([system.reflection.assembly]::loadfile("dll full path")).FullName

এবং প্রদর্শিত হবে

মাইএসকিউএল.ডাটা, সংস্করণ = 6.6.5.0, সংস্কৃতি = নিরপেক্ষ, পাবলিককি টোকেন = c5687fc88969c44d


আশ্চর্যজনক, আমি যদি ম্যানুয়ালি অ্যাসেম্বলিগুলি যোগ করি তবে আমাকে পুরো ফলাফলটি অনুলিপি করে একটি ওয়েব কনফিগারেশনে আটকান। ধন্যবাদ!
GJKH

দুর্দান্ত উত্তর, আপনি যেমন সংস্করণটি পেতে পারেন (যা সমস্যা সমাধানের জন্য গুরুত্বপূর্ণ হতে পারে)।
sbkrogers

48

লাইব্রেরিটি ভিএস প্রকল্পের অন্তর্ভুক্ত থাকলে আপনি .cprojফাইলটি পরীক্ষা করতে পারেন , উদাহরণস্বরূপ:

<ItemGroup>
    <Reference Include="Microsoft.Dynamic, Version=1.1.0.20, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL">
...

2
আমি কেবল <রেফারেন্স অন্তর্ভুক্ত = "সিস্টেম.ইডেন্টিটি মডেল" /> (অন্যান্য সমাবেশগুলির জন্য একই) দেখতে
পাচ্ছি

.NET সিস্টেম লাইব্রেরিতে সমাবেশগুলির জন্য খুব বেশি ব্যবহার হবে বলে মনে হয় না। উদাহরণস্বরূপ System.Configration এর জন্য এটি ঠিক বলেছেন<Reference Include="System.Configuration" />
সাইমন তেউসি

দেখে মনে হচ্ছে যে সমস্ত অ্যাসেমব্লির সমান রয়েছে PublicKeyToken, তাই মনে হয় এটির সন্ধান .cprojসহজতম সমাধান বলে মনে হচ্ছে।
এসএসডিএফ

14

আপনি যদি আপনার প্রকল্পে সমাবেশটি অন্তর্ভুক্ত করেন তবে আপনি এটি করতে পারেন:

            var assemblies =
                AppDomain.CurrentDomain.GetAssemblies();


            foreach (var assem in assemblies)
            {
                    Console.WriteLine(assem.FullName);
            }

এটি আমার তথ্যসূত্রগুলিতে dll এর সর্বজনীন কী টোকেন পাচ্ছে না। আপনার পদ্ধতিটি কি কোনও নির্দিষ্ট প্রকল্পের রেফারেন্সগুলিতে সত্যিই সমস্ত dll পায়? ধন্যবাদ
ফ্রান্সিস শৌল

@ ফ্রেঞ্চিসল - এটি কেবলমাত্র আপনার অ্যাপ্লিকেশনটির প্রক্রিয়া স্মৃতিতে লোড করা সমাবেশগুলি তালিকাবদ্ধ করবে; নির্দিষ্ট সমাবেশের বিশদ দেখতে, প্রথমে রান কোড যা সেই সমাবেশের কোনও ধরণের উল্লেখ করে type উদাহরণস্বরূপ, assembly সমাবেশে কিছু শ্রেণীর একটি নতুন উদাহরণ তৈরি করুন।
টুলমেকারস্টেভ

এটি আমার পক্ষে কাজ করা সবচেয়ে সহজ পদ্ধতি। এটি আরও সরল করা যেতে পারে: একটি ব্রেকপয়েন্ট সেট সহ অ্যাপ্লিকেশনটি চালান। মৃত্যুদন্ড ব্রেকপয়েন্ট উপর একটু থামেন, বনাম তাৎক্ষণিক উইন্ডো ধরনের কখন: AppDomain.CurrentDomain.GetAssemblies()। এটি তাত্ক্ষণিক উইন্ডোতে লোড হওয়া অ্যাসেমব্লিকে তালিকাভুক্ত করবে, প্রত্যেকটির জন্য সংস্করণ, সংস্কৃতি এবং পাবলিককি টোকেন।
সাইমন তেউসি

'সি # ইন্টারেক্টিভ' তে চালানোও সম্ভব - কোনও সংকলনের প্রয়োজন নেই!
বিটিব

13

আপনি এটি সি # এর মাধ্যমে সহজেই পেতে পারেন

private static string GetPublicKeyTokenFromAssembly(Assembly assembly)
{
    var bytes = assembly.GetName().GetPublicKeyToken();
    if (bytes == null || bytes.Length == 0)
        return "None";

    var publicKeyToken = string.Empty;
    for (int i = 0; i < bytes.GetLength(0); i++)
        publicKeyToken += string.Format("{0:x2}", bytes[i]);

    return publicKeyToken;
}

আমি আপনার কোড চেষ্টা করেছিলাম কিন্তু এটি কাজ করছে না। আমি স্টিমুলসফট্ট.রপোর্ট.ওয়েব.ডেল এর সর্বজনীন কী টোকেন পেতে চাই যা আমার রেফারেন্সে ইতিমধ্যে রয়েছে। আমি আপনার কোডটি অনুলিপি করেছি এবং dll এর নামটি দিয়েছি তবে এটি কাজ করছে না। আমার কোডটি এরকম কিছু হয়: স্ট্রিং এস = গেটপলিটিক্যকিটোকেনফ্রমঅ্যাসাব্যাসেস ("স্টিমুলসফটফট.রেপ.ওয়েব")। স্পষ্টতই পদ্ধতিটি স্ট্রিংয়ের নাম নয়, সমাবেশকে মেনে নিচ্ছে। আপনার পদ্ধতিটি কীভাবে ব্যবহার করতে পারেন আপনি আমাকে সহায়তা করতে পারেন?
ফ্রান্সিস শৌল

@ ফ্র্যাঙ্কিসসল পদ্ধতিটি কী "কী না" বা একটি ভুল মান ফিরে আসে? আপনি কি স্থির করেছেন যে সমাবেশটি নামেই শক্তিশালী? আপনি রেফারেন্সের জন্য সম্পত্তি প্যানেলে ভিএস-এ যাচাই করতে পারেন (শক্ত নাম)। আপনি জাস্টডেকম্পাইলের মতো সর্বাধিক ফ্রি ডিস্কমিলার সহ এটি সহজেই পরীক্ষা করে দেখতে পারেন। আপনি যদি দেখেন এটির নামটি শক্তিশালী, কোডটি ডিবাগ করুন এবং বাইটগুলি পরীক্ষা করুন।
অ্যাডাম ক্যাভিনিস

আমি কোডটি স্ট্রিংয়ের s = গেটপলিটকিকেটোকেনফ্রোমঅ্যাস্প্যাসেস ("স্টিমুলসফটফট.রপোর্ট.ওয়েব") টাইপ করার পরে, প্রকল্পটি চালাতে পারছি না, এতে বলা হয়েছে যে পদ্ধতির জন্য সর্বোত্তম ওভারলোডটিতে অবৈধ যুক্তি রয়েছে।
ফ্রান্সিস শৌল

@ ফ্রাঙ্কিসসুল আপনি কোনও পদ্ধতিতে অ্যাসেম্বলি গ্রহণের পক্ষে একটি স্ট্রিং যুক্তি দিয়ে যাচ্ছেন takes আপনি পছন্দ করতে পারেন typeof(YourPreferredTypeInThatAssembly).Assemblyবা Assembly.GetAssembly(typeof(YourPreferredTypeInThatAssembly))পদ্ধতিতে পাস করতে পারেন এবং।
অ্যাডাম ক্যাভিনেস

সুতরাং সিনট্যাক্সটি এটির মতো হবে। সমাবেশ.গেটঅ্যাসবেশন (টাইপফ ("স্টিমুলসসফট্ট। রিপোর্টার.ওয়েব.ডেল));
ফ্রান্সিস শৌল

9

আপনি এটিকে ভিজ্যুয়াল স্টুডিওতে বাহ্যিক সরঞ্জাম হিসাবে যুক্ত করতে পারেন:

শিরোনাম:

Get PublicKeyToken

COMMAND:

c:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\sn.exe

(সংস্করণগুলির মধ্যে পাথ পৃথক হতে পারে)

যুক্তি:

-T "$(TargetPath)"

এবং " ব্যবহার আউটপুট উইন্ডো " বিকল্পটি চেক করুন


1
আপনি যখন Toolsমেনু থেকে এটি নির্বাচন করেন, সলিউশন এক্সপ্লোরারে আপনি যে প্রকল্পটি নির্বাচন করেছেন এটি স্বয়ংক্রিয়ভাবে পরিচালনা করবে।
কনটাঙ্গো

আমি আমার কমান্ডটির নাম পরিবর্তন করে দিয়েছি Get PublicKeyToken on Solution Explorer Selection
কনটাঙ্গো

1
ভাল উত্তর! ইঙ্গিত: আপনি যদি "আর্গুমেন্টের জন্য অনুরোধ" চেকবক্সটি সক্ষম করে থাকেন, তবে একটি ডায়ালগ খোলে যা আপনাকে এতে কোনও পথ আটকে দেবে। সুতরাং আপনি এখানে বৈশিষ্ট্য উইন্ডো থেকে উদাহরণস্বরূপ একত্রিত পথ অনুলিপি করতে পারেন। এটি আমার জন্য খুব দরকারী ছিল, বিশেষত যখন আমাকে ওয়েবকনফাইগের রেজিস্ট্রেশনগুলি পরিবর্তন করতে হয়েছিল এবং কোনও ডিএলএল পাবলিক কী টোকেন জানতাম না।
ম্যাট

8

আমার জন্য সহজ উপায় হ'ল আইএলএসপিএস ব্যবহার করা ।

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

(আমি আরও মনে করি যে নতুন সংস্করণগুলি স্বাক্ষরটির সর্বজনীন কীটিও প্রদর্শন করবে, যদি আপনার যদি এটির কোনও প্রয়োজন হয় তবে এখানে দেখুন: https://github.com/icsharpcode/ILSpy/issues/610#issuecomment-111189234) । ভাল জিনিস! ;))


5

1) আদেশটি হল C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\sn -T {your.dll}

উপরের উদাহরণে, মাইক্রোসফ্ট এসডিকে সি: \ প্রোগ্রাম ফাইলগুলি \ মাইক্রোসফ্ট এসডিকে \ উইন্ডোজ 6 v6.0A এ থাকে। আপনার পরিবেশ পৃথক হতে পারে।

২) আপনার যে কোনও প্রকল্পের সর্বজনীন কী টোকেন পেতে, আপনি ভিজুয়াল স্টুডিওতে আপনার বাহ্যিক সরঞ্জামগুলির অংশ হিসাবে sn.exe যুক্ত করতে পারেন। পদক্ষেপগুলি এই মাইক্রোসফ্ট লিঙ্কে দেখানো হয়েছে : কীভাবে: কোনও সমাবেশের পাবলিক কী পাওয়ার জন্য একটি সরঞ্জাম তৈরি করুন


হ্যাঁ আমি জানি যে, আমি একটি সহজ উপায় খুঁজছি, পছন্দ করে ভিএস ছাড়াই
moi_meme

5

যদি কেউ এসেম্বলির পাবলিক কী (আমার মতো) সন্ধান করে, পাবলিক কী টোকেন না - sn.exe ব্যবহার করে দুর্দান্ত কাজ করে, আপনি -Tp সুইচ ব্যবহার করতে হবে, যা পাবলিক কী এবং পাবলিক কী টোকন উভয়ই ফিরিয়ে দেবে - আরও এ https://msdn.microsoft.com/en-us/library/office/ee539398(v=office.14).aspx


5

বিকল্প হিসাবে, আপনি এটি ব্যবহার করতে পারেন linq-

    string key = string.Join ("",assembly
                                .GetName()
                                .GetPublicKeyToken()
                                .Select (b => b.ToString ("x2")));

1
তিনি জনসাধারণের কী টোকেন চেয়েছিলেন। আপনার কোডটি সর্বজনীন কী ব্যবহার করে। এটি হওয়া উচিত.GetPublicKeyToken()
স্টেফান জন্ম

1

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


1

এর জন্য অপশনগুলি ওপেন সোর্স সরঞ্জামটি নুগেট প্যাকেজ এক্সপ্লোরার ব্যবহার করা।

নিউজ প্যাকেজ (.nupkg) থেকে আপনি পাবলিককি টোকেন চেক করতে পারেন বা সরঞ্জামটিতে বাইনারি (.dll) টেনে আনতে পারেন। পরেরটির জন্য প্রথমে "ফাইল -> নতুন" নির্বাচন করুন

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


0

সমাবেশের মেটাডেটা পরীক্ষা করার জন্য আপনি Ildasm.exe (IL Disassembler) ব্যবহার করতে পারেন, এতে পুরোপুরি যোগ্যতাসম্পন্ন নাম রয়েছে।

এমএসডিএন অনুসরণ করছে: https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx

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