শর্তাধীনভাবে ভিজুয়াল স্টুডিওতে বিল্ডিংয়ের সময় 32/64 বিট রেফারেন্স ব্যবহার করুন


124

আমার কাছে একটি প্রকল্প রয়েছে যা 32/64-বিটে তৈরি করে এবং 32/64-বিট নির্ভরতা করে। আমি কনফিগারেশনগুলিতে স্যুইচ করতে এবং সঠিক রেফারেন্সটি ব্যবহার করতে সক্ষম হতে চাই, তবে কীভাবে ভিজুয়াল স্টুডিওকে আর্কিটেকচার-উপযুক্ত নির্ভরতা ব্যবহার করতে বলি তা জানি না।

হতে পারে আমি এই ভুল পথে চলছি, তবে কনফিগারেশন ড্রপডাউনটিতে আমি x86 এবং x64 এর মধ্যে স্যুইচ করতে সক্ষম হতে চাই এবং রেফারেন্সড ডিএলএলকে সঠিক সাক্ষ্য দিতে হবে।


খুব অস্পষ্ট, এটি কোন ভাষা? ডিএলএল প্রকল্পটি কি সমাধানে রয়েছে?
হান্স প্যাস্যান্ট

দুঃখিত, এটি। নেট, আমি সি # তে লিখছি।
জোনাথন ইয়ে

4
ঠিক আছে, আমি এটি একটি বোবা সমাধান দিয়ে সমাধান করেছি: একটি অতিরিক্ত সিএসপোজ ফাইল তৈরি করেছে যা কেবলমাত্র x64 ডিএলএল-এর উল্লেখ করে (এবং সিএসপিওজ থেকে x86 কনফিগারেশন সরিয়ে নিয়েছে)। এটি কাজ করে, তবে যদি কারও কাছে আরও মার্জিত সমাধান থাকে যা কোনও অতিরিক্ত সিএসপোজ জড়িত না, আমি এটি দেখতে পছন্দ করব।
জোনাথন ইয়ে

উত্তর:


99

পূর্ববর্তী প্রকল্পে আমি যা করেছি তা এখানে দেওয়া হয়েছে, যার জন্য .csproj ফাইল (গুলি) এর ম্যানুয়াল সংস্করণ প্রয়োজন। আপনার আলাদা বাইনারিগুলির জন্য, একে অপরের আদর্শভাবে ভাইবোন এবং যে প্ল্যাটফর্মটি আপনি টার্গেট করছেন তার একই নামের জন্যও আপনার পৃথক ডিরেক্টরি প্রয়োজন।

প্রকল্পে একটি একক প্ল্যাটফর্মের রেফারেন্স যুক্ত করার পরে, পাঠ্য সম্পাদকটিতে .csproj খুলুন। <ItemGroup>উপাদানটির মধ্যে প্রথম উপাদানটির আগে <Project>, নিম্নলিখিত কোডটি যুক্ত করুন, যা আপনি কোন প্ল্যাটফর্মটি চালাচ্ছেন (এবং বিল্ডিং করছেন) তা নির্ধারণ করতে সহায়তা করবে।

<!-- Properties group for Determining 64bit Architecture -->
<PropertyGroup>
  <CurrentPlatform>x86</CurrentPlatform>
  <CurrentPlatform Condition="'$(PROCESSOR_ARCHITECTURE)'=='AMD64' or '$(PROCESSOR_ARCHITEW6432)'=='AMD64'">AMD64</CurrentPlatform>
</PropertyGroup>

তারপরে, আপনার প্ল্যাটফর্মের সুনির্দিষ্ট রেফারেন্সগুলির জন্য, আপনি নিম্নলিখিতগুলির মতো পরিবর্তনগুলি করেন:

<ItemGroup>
  <Reference Include="Leadtools, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.dll</HintPath>
  </Reference>
  <Reference Include="Leadtools.Codecs, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.Codecs.dll</HintPath>
  </Reference>
  <Reference Include="Leadtools.ImageProcessing.Core, Version=16.5.0.0, Culture=neutral, PublicKeyToken=9cf889f53ea9b907, processorArchitecture=x86">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>..\..\Lib\Leadtools\$(CurrentPlatform)\Leadtools.ImageProcessing.Core.dll</HintPath>
  </Reference>
  <Reference Include="System" />
  <Reference Include="System.Core" />
  <Reference Include="System.Data.Entity" />
  <!--  Other project references -->
</ItemGroup>

$(CurrentPlatform)সম্পত্তিটির ব্যবহারটি নোট করুন , যা আমরা উপরে সংজ্ঞায়িত করেছি। আপনি পরিবর্তে শর্তসাপেক্ষে কোন সমাবেশগুলির জন্য কোন প্ল্যাটফর্মের জন্য অন্তর্ভুক্ত থাকতে পারে তা ব্যবহার করতে পারেন। আপনারও এটির দরকার হতে পারে:

  • প্রকল্পগুলির কেবলমাত্র লক্ষ্য প্ল্যাটফর্ম বিবেচনা করার জন্য $(PROCESSOR_ARCHITEW6432)এবং এর $(PROCESSOR_ARCHITECTURE)সাথে প্রতিস্থাপন করুন$(Platform)
  • বর্তমান মেশিনের উপযুক্ত হওয়ার জন্য প্ল্যাটফর্মের দৃ determination় সংকল্পকে যুক্তি পরিবর্তন করুন, যাতে আপনি 32 বিট প্ল্যাটফর্মের উপর চালানোর জন্য একটি 64 বিট বাইনারি নির্মাণ / উল্লেখ করছেন না।

আমি কার্যত অভ্যন্তরীণ উইকির জন্য মূলত এটি লিখেছিলাম, তবে আমি যদি এটি ধাপে ধাপে বিস্তারিত নির্দেশিকায় আগ্রহী হয় তবে আমি এটি সংশোধন করেছি এবং আমার ব্লগে সম্পূর্ণ প্রক্রিয়াটি পোস্ট করেছি ।


1
খুশী হলাম। আমি নীচের পরামর্শ অনুযায়ী আইটেমগ্রুপে শর্তসাপেক্ষ ব্যবহার করতে গিয়েছিলাম তবে এখানে অবস্থার জন্য $ (PROCESSOR_ARCHITEW6432) এবং $ (PROCESSOR_ARCHITECTURE) ব্যবহার করছি। একটি নোট আমি খুঁজে পেয়েছি $ (PROCESSOR_ARCHITECTURE) 32 এবং 64 বিট উভয় প্ল্যাটফর্মে x86 প্রদান করে কিন্তু $ (PROCESSOR_ARCHITEW6432) কেবলমাত্র 64 বিট এএমডি 64 প্রদান করে। আপনি যদি x86 এর জন্য পরীক্ষা করার চেষ্টা করেন তবে কিছু লক্ষণীয় (কারণ এএমডি x৪ আমি x86 অনুমান করি এটি অনুমান)।
tjmoore

@Tjmoore তথ্যের জন্য ধন্যবাদ। কোন ও / এস আপনি এটি লক্ষ্য করেছেন? আমি কেবল আমার আবার পরীক্ষা করেছি (Win7SP1) এবং D (PROCESSOR_ARCHITECTURE) এর জন্য AMD64 বলছি, তবে অবশ্যই যথাসম্ভব সম্পূর্ণ এবং সম্পূর্ণ তথ্য পেতে চাই।
হুগো

7
মজার বিষয় হল, আমার অনুসন্ধান আমাকে এখানে এনেছে এবং আমার কেবল এটির প্রয়োজন কারণ আমি লেডটুলগুলিও ব্যবহার করছি ... +1
এড এস

সমাধানটি ডিফল্ট কনফিগারেশনের জন্য কাজ করে, তবে আপনি যদি ভিজ্যুয়াল স্টুডিও (আমার ক্ষেত্রে 2012) সলিউশন কনফিগারেশন ড্রপডাউন তালিকা থেকে কনফিগারেশন থেকে কনফিগারেশন পরিবর্তন করেন তবে আমার পরীক্ষার মাধ্যমে নয়।
সারা ওয়েইনবার্গার

Some (PROCESSOR_ARCHITEW6432) ব্যবহার করার পরিবর্তে আমি কোনও কারণে $ (প্ল্যাটফর্ম) ব্যবহার করেছি $ (PROCESSOR_ARCHITEW6432) কাজ করছে না।
জাজান

60

আফাইক, যদি আপনার প্রকল্পের জন্য 32-বিট বা -৪-বিট নির্দিষ্ট (যেমন সিওএম-ইন্টারপ অ্যাসেমস্লিগুলি) উল্লেখ রয়েছে এবং আপনি .csproj ফাইলটি ম্যানুয়ালি সম্পাদনা করতে আগ্রহী না হন, তবে আপনাকে আলাদা 32-বিট তৈরি করতে হবে এবং -৪-বিট প্রকল্প।

আমার লক্ষ্য করা উচিত যে নিম্নলিখিত সমাধানটি অনির্ধারিত, তবে কাজ করা উচিত। আপনি যদি ম্যানুয়ালি .csproj ফাইল সম্পাদনা করতে ইচ্ছুক হন, তবে আপনার একক প্রকল্পের সাথে কাঙ্ক্ষিত ফলাফল অর্জন করতে সক্ষম হওয়া উচিত। .Csproj ফাইলটি কেবলমাত্র একটি এমএস বিল্ড স্ক্রিপ্ট, সুতরাং সম্পূর্ণ রেফারেন্সের জন্য এখানে দেখুন । আপনি একবার সম্পাদকে .csproj ফাইলটি খুললে, <Reference>উপাদানগুলি সন্ধান করুন। আপনার এই উপাদানগুলিকে 3 টি স্বতন্ত্র আইটেম গ্রুপগুলিতে বিভক্ত করতে সক্ষম হওয়া উচিত : রেফারেন্সগুলি যা প্ল্যাটফর্ম নির্দিষ্ট নয়, x86- নির্দিষ্ট রেফারেন্স এবং x64- নির্দিষ্ট রেফারেন্স।

এখানে একটি উদাহরণ রয়েছে যা ধরে নিয়েছে যে আপনার প্রকল্পটি "x86" এবং "x64" নামের টার্গেট প্ল্যাটফর্মগুলির সাথে কনফিগার করা হয়েছে

<!-- this group contains references that are not platform specific -->
<ItemGroup>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <!-- any other references that aren't platform specific -->
</ItemGroup>

<!-- x86 specific references -->
<ItemGroup Condition=" '$(Platform)' == 'x86' ">
    <Reference Include="MyComAssembly.Interop">
        <HintPath>..\..\lib\x86\MyComAssembly.Interop.dll</HintPath>
    </Reference>

    <!-- any additional x86 specific references -->
</ItemGroup>

<!-- x64 specific referneces -->
<ItemGroup Condition=" '$(Platform)' == 'x64' ">
    <Reference Include="MyComAssembly.Interop">
        <HintPath>..\..\lib\x64\MyComAssembly.Interop.dll</HintPath>
    </Reference>

    <!-- any additional x64 specific references -->
</ItemGroup>

এখন, আপনি যখন আপনার প্রকল্প / সমাধান বিল্ড কনফিগারেশনটি x86 বা x64 প্ল্যাটফর্মটি লক্ষ্য করে সেট করেন, তবে এটি প্রতিটি ক্ষেত্রে যথাযথ রেফারেন্স অন্তর্ভুক্ত করা উচিত। অবশ্যই, আপনাকে <Reference>উপাদানগুলির সাথে চারপাশে খেলতে হবে । এমনকি আপনি x86 এবং x64 রেফারেন্স যুক্ত করার সাথে ডামি প্রকল্পগুলি সেটআপ করতে পারেন এবং তারপরে <Reference>সেই ডামি প্রকল্প ফাইলগুলি থেকে প্রয়োজনীয় উপাদানগুলি আপনার "আসল" প্রকল্প ফাইলটিতে অনুলিপি করতে পারেন।


সম্পাদনা 1
সাধারণ এমএসবিল্ড প্রকল্প আইটেমগুলির একটি লিঙ্ক এখানে দেওয়া হয়েছে, যা আমি ভুলক্রমে মূল পোস্টটি থেকে ছেড়ে দিয়েছি: http://msdn.microsoft.com/en-us/library/bb629388.aspx


দুর্দান্ত উত্তর !! আমার দিন বাঁচা! অনেক ধন্যবাদ.
Hellodear

20

আপনি প্রকল্প ফাইলের dll রেফারেন্সের জন্য একটি আইটেমগ্রুপের একটি শর্ত ব্যবহার করতে পারেন ।
আপনি যখনই সক্রিয় কনফিগারেশন পরিবর্তন করেন তখন এটি ভিজ্যুয়াল স্টুডিওর শর্ত এবং রেফারেন্সগুলি পুনরুদ্ধার করে।
প্রতিটি কনফিগারেশনের জন্য কেবল একটি শর্ত যুক্ত করুন।

উদাহরণ:

 <ItemGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
    <Reference Include="DLLName">
      <HintPath>..\DLLName.dll</HintPath>
    </Reference>
    <ProjectReference Include="..\MyOtherProject.vcxproj">
      <Project>{AAAAAA-000000-BBBB-CCCC-TTTTTTTTTT}</Project>
      <Name>MyOtherProject</Name>
    </ProjectReference>
  </ItemGroup>

1
এই মহান, আপনাকে ধন্যবাদ! এটি অবশ্যই গ্রহণযোগ্য সমাধান হওয়া উচিত!
ম্যানিক ব্লোফিশ

গুরুতরভাবে, এই উত্তরটি আরও উত্তম এবং সরল যা গ্রহণযোগ্য একটি।
ইয়ান্ড্রোস

1
এটি করার পরে রেফারেন্সে নকল এন্ট্রি থাকা কি স্বাভাবিক?
নাটেনহো

7

আমি আমার প্রকল্পে উদাহরণস্বরূপ \ উপাদান \ v3_NET4 এ অবস্থিত x86 ডিএলএলগুলি উল্লেখ করছি। X86 / x64 এর জন্য নির্দিষ্ট ডিএলএলগুলি "x86" এবং "x64" রেফারেন্স নামের সাব-ফোল্ডারে অবস্থিত।

তারপরে আমি একটি প্রাক-বিল্ড স্ক্রিপ্ট ব্যবহার করছি যা D (প্ল্যাটফর্মনাম) এর উপর ভিত্তি করে উপযুক্ত ডিএলএল (x86 / x64) কে রেফারেন্সযুক্ত ফোল্ডারে অনুলিপি করে।

xcopy /s /e /y "$(SolutionDir)..\component\v3_NET4\$(PlatformName)\*" "$(SolutionDir)..\component\v3_NET4"

আমার জন্য কাজ কর.


3

এক। X86 / x64 নির্ভরতা সহ নেট বিল্ড

প্ল্যাটফর্ম অনুসারে অন্য সমস্ত উত্তরগুলি আপনাকে আলাদা বিল্ড তৈরির সমাধান দেয়, আমি আপনাকে কেবল "যেকোনইসিপিইউ" কনফিগারেশন করতে এবং এমন একটি বিল্ড তৈরি করতে সহায়তা করি যা আপনার x86 এবং x64 ডলসের সাথে কাজ করে।

রানটাইমের সময় সঠিক x86 / x64-dlls এর রেজোলিউশন

পদক্ষেপ:

  1. সিএসপিজেজে যে কোনও এসসিপিইউ ব্যবহার করুন
  2. আপনি যদি আপনার সিএসপোজগুলিতে কেবলমাত্র x86 বা x64 ডলসটি উল্লেখ করেন তবে সিদ্ধান্ত নিন। আপনি যে আর্কিটেকচার সেটিংসটি বেছে নিয়েছেন তাতে ইউনিট টেস্ট সেটিংস মানিয়ে নিন। এটি ভিজুয়ালস্টুডিওর মধ্যে পরীক্ষাগুলি ডিবাগিং / চালানোর জন্য গুরুত্বপূর্ণ।
  3. রেফারেন্স-প্রোপার্টি সেট কপি স্থানীয় & নির্দিষ্ট সংস্করণটিতে করার মিথ্যা
  4. আপনার সমস্ত csproj ফাইল যেখানে আপনি x86 / x64 রেফারেন্স করেছেন সেখানে প্রথম সম্পত্তি গ্রুপে এই লাইনটি যুক্ত করে আর্কিটেকচার সতর্কতা থেকে মুক্তি পান : <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
  5. আপনার স্টার্টআপ প্রজেক্টে এই পোস্ট বিল্ড স্ক্রিপ্টটি যুক্ত করুন, এই স্ক্রিপ্টের পাথগুলি ব্যবহার করুন এবং সংশোধন করুন যাতে এটি আপনার বিল্ড বিন \ x86 \ বিন \ x64 correspond এর সংশ্লিষ্ট সাবফোল্ডারগুলিতে আপনার সমস্ত x86 / x64 dlls অনুলিপি করে

    xcopy /E /H /R /Y /I /D $(SolutionDir)\YourPathToX86Dlls $(TargetDir)\x86 xcopy /E /H /R /Y /I /D $(SolutionDir)\YourPathToX64Dlls $(TargetDir)\x64

    -> আপনি এখনই আবেদন শুরু করার সময়, আপনি একটি ব্যতিক্রম পাবেন যে সমাবেশটি পাওয়া যায় নি be

  6. আপনার অ্যাপ্লিকেশন এন্ট্রি পয়েন্টের ঠিক শুরুতে অ্যাসেমব্লি রিসলভ ইভেন্টটি নিবন্ধভুক্ত করুন

    AppDomain.CurrentDomain.AssemblyResolve += TryResolveArchitectureDependency;

    এই পদ্ধতি সহ:

    /// <summary>
    /// Event Handler for AppDomain.CurrentDomain.AssemblyResolve
    /// </summary>
    /// <param name="sender">The app domain</param>
    /// <param name="resolveEventArgs">The resolve event args</param>
    /// <returns>The architecture dependent assembly</returns>
    public static Assembly TryResolveArchitectureDependency(object sender, ResolveEventArgs resolveEventArgs)
    {
        var dllName = resolveEventArgs.Name.Substring(0, resolveEventArgs.Name.IndexOf(","));
    
        var anyCpuAssemblyPath = $".\\{dllName}.dll";
    
        var architectureName = System.Environment.Is64BitProcess ? "x64" : "x86";
    
        var assemblyPath = $".\\{architectureName}\\{dllName}.dll";
    
        if (File.Exists(assemblyPath))
        {
            return Assembly.LoadFrom(assemblyPath);
        }
    
        return null;
    }
  7. আপনার যদি ইউনিট টেস্টগুলি এমন একটি পদ্ধতি দিয়ে একটি টেস্টক্লাস তৈরি করে যার একটি অ্যাসেম্বলিআইনিটায়ালাইজ এট্রিবিউট রয়েছে এবং উপরের ট্রাই রোলস আর্কিটেকচারডিপেন্ডেন্সি-হ্যান্ডলারটি এখানে নিবন্ধ করুন। (আপনি কখনও কখনও ভিজ্যুয়াল স্টুডিওর অভ্যন্তরে একক পরীক্ষা চালালে এগুলি কার্যকর করা হবে না, উল্লেখগুলি ইউনিট টেস্ট বিন থেকে নয় সমাধান করা হবে Therefore সুতরাং দ্বিতীয় পদক্ষেপের সিদ্ধান্ত গুরুত্বপূর্ণ))

উপকারিতা:

  • উভয় প্ল্যাটফর্মের জন্য একটি ইনস্টলেশন / বিল্ড

ত্রুটি: - x86 / x64 dlls না মিলে সংকলনের সময় কোনও ত্রুটি। - আপনার এখনও দুটি মোডে পরীক্ষা চালানো উচিত!

Buচ্ছিকভাবে দ্বিতীয় নির্বাহযোগ্য তৈরি করুন যা পোস্ট বিল্ড স্ক্রিপ্টে Corflags.exe এর সাথে x64 আর্কিটেকচারের জন্য একচেটিয়া

অন্যান্য বৈকল্পিকগুলি চেষ্টা করে দেখুন: - আপনার যদি অন্যথায় আশ্বাস দেওয়া হয় যে আপনার ডিলগুলি আপনার বাইনারি ফোল্ডারে অনুলিপি করা শুরু করে (তবে প্রসেস আর্কিটেকচারের মূল্যায়ন করুন -> x64 / x86 থেকে বিন ফোল্ডারে এবং পিছনে সংশ্লিষ্ট dlls সরান) - ইনস্টলার ইন আর্কিটেকচার মূল্যায়ন করুন এবং ভুল স্থাপত্যের জন্য বাইনারিগুলি মুছুন এবং ডানগুলি বিন ফোল্ডারে সরান।


2

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

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

কিছুক্ষণ পরে, আমি অবশেষে সীমাটি ভুলে গিয়েছিলাম এবং ঘটনাক্রমে x64 বিল্ডটি শুরু করেছি। অবশ্যই, বিল্ড ব্যর্থ হয়েছে। তবে গুরুত্বপূর্ণ আমি পেয়েছি ত্রুটি বার্তা। ত্রুটি বার্তাটি বলেছিল যে ঠিক আমার রেফারেন্সড x86 অ্যাসেমব্লিল হিসাবে নামকরণ করা সমাবেশটি আমার সমাধানের জন্য x64 বিল্ড লক্ষ্য হিসাবে ফোল্ডারে অনুপস্থিত in

এটি লক্ষ্য করে, আমি নিজেই সঠিক ডিরেক্টরি x64 এসেম্বলিটি এই ডিরেক্টরিতে অনুলিপি করেছি। ইহা যোগ্য নয়; আমার এক্স 64 বিল্ডটি অলৌকিকভাবে যথাযথ সমাবেশ খুঁজে পেয়ে এবং স্পষ্টভাবে সংযুক্ত করে সফল হয়েছে। এই ফোল্ডারে x64 অ্যাসেমব্লির জন্য বিল্ড টার্গেট ডিরেক্টরি সেট করতে আমার সমাধানটি পরিবর্তন করতে কয়েক মিনিটের ব্যাপার ছিল। এই পদক্ষেপগুলির পরে এমএসবিল্ড ফাইলগুলির কোনও ম্যানুয়াল সম্পাদনা ছাড়াই x86 এবং x64 উভয়ের জন্য সমাধান স্বয়ংক্রিয়ভাবে তৈরি হয়।

সংক্ষেপে:

  1. একক প্রকল্পে x86 এবং x64 টার্গেট তৈরি করুন
  2. X86 অ্যাসেমব্লিতে সমস্ত যথাযথ প্রকল্পের রেফারেন্স যুক্ত করুন
  3. সমস্ত x64 টি সমাবেশের জন্য একটি সাধারণ বিল্ড টার্গেট ডিরেক্টরি সেট করুন
  4. আপনার কাছে x64 টি অ্যাসেমব্লি প্রস্তুত থাকলে কেবল সেগুলি একবার আপনার x64 বিল্ড টার্গেট ডিরেক্টরিতে অনুলিপি করুন

এই পদক্ষেপগুলি সমাপ্ত হওয়ার পরে আপনার সমাধানটি x86 এবং x64 উভয় কনফিগারেশনের জন্য যথাযথভাবে তৈরি করবে।

এটি আমার জন্য ভিজ্যুয়াল স্টুডিও 2010। নেট 4.0 সি # প্রকল্পে কাজ করেছে। স্পষ্টতই, এটি ভিজ্যুয়াল স্টুডিওর এক প্রকারের অনথিভুক্ত অভ্যন্তরীণ আচরণ, যা 2012, 2013 এবং 2015 সংস্করণে পরিবর্তিত হতে পারে। যদি কেউ অন্য সংস্করণে চেষ্টা করে তবে দয়া করে আপনার অভিজ্ঞতা ভাগ করুন।


-1

আমি যে সহজ সমাধানটিকে বিবেচনা করি তা ব্যবহার করে শেষ করেছি যা মিকের বিপরীতে সাজানো। প্রকল্পটি একটি সি # ফর্ম অ্যাপ্লিকেশন, ভিজ্যুয়াল স্টুডিও 2015, x86 এবং x64 টার্গেট সহ। আমি নেট নেট অ্যাসেমব্লির মধ্যে একটি উল্লেখ করেছি, আমি 32 বিট ব্যবহার করেছি। রেফারেন্স বৈশিষ্ট্যগুলিতে, আমি "কপিরাইট লোকাল" কে মিথ্যা হিসাবে সেট করেছি। তারপরে আমি কেবল ম্যানুয়ালি উপযুক্ত (32 বা 64 বিট) রেখেছি। প্রতিটি লক্ষ্য ডিরেক্টরিতে নেট সমাবেশ। প্রকৃত রেফারেন্স সাক্ষ্যটি অপ্রাসঙ্গিক, ধরে নিলে তাদের একই ক্ষমতা রয়েছে, কারণ এটি কেবল বাহ্যিক ইন্টারফেসটিকে সংজ্ঞায়িত করে। আপনি অভিনবতা পেতে চাইলে আপনি একটি পোস্ট বিল্ড অনুলিপি পদক্ষেপও রাখতে পারেন। নোট করুন এই প্রকল্পে একটি COM রেফারেন্সও ছিল, একই জিনিস কাজ করে। রেফারেন্সটি অবজেক্ট / ইন্টারফেসগুলি সংজ্ঞায়িত করে তাই রেফারেন্স ডিএলএল এর সাক্ষ্য অপ্রাসঙ্গিক। 32 বিট এবং 64 বিট COM DLL উভয়ই নিবন্ধিত থাকলে, অ্যাপ্লিকেশনটি রেজিস্ট্রিতে উপযুক্ত জায়গায় সন্ধান করবে এবং সঠিক 32 বা 64 বিট COM অবজেক্ট তৈরি করবে। আমার জন্য কাজ কর!

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