আমি এমএসবিল্ডের প্ল্যাটফর্মটি কীভাবে নির্দিষ্ট করব?


155

আমি একটি নির্দিষ্ট লক্ষ্য প্ল্যাটফর্মের সাথে সমাধান তৈরি করতে এমএসবিল্ডটি ব্যবহার করার চেষ্টা করছি (আমার উভয় বাইনারি, x86 এবং x64 প্রয়োজন)। এইভাবে আমি এটি চেষ্টা করেছিলাম:

C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"

তবে প্ল্যাটফর্মটি "যে কোনও সিপিইউ" থেকে আলাদা থাকলে বিল্ডটি সর্বদা ব্যর্থ হয়। আমি কি ভুল করছি?

এটি যখন আউটপুট এমএসবিল্ড প্রিন্ট করে:

সি: I উইন্ডোজ \ মাইক্রোসফ্ট.নেট \ ফ্রেমওয়ার্ক \ v3.5> এমস বিল্ড সলিউশনপথ olution সমাধান.স্লেন / টি: পুনর্নির্মাণ / পি: কনফিগারেশন = প্রকাশ / পি: প্ল্যাটফর্ম = "x86" মাইক্রোসফ্ট (আর) বিল্ড ইঞ্জিন সংস্করণ 3.5.30729.1 [ মাইক্রোসফ্ট। নেট ফ্রেমওয়ার্ক, সংস্করণ 2.0.50727.3082] কপিরাইট (সি) মাইক্রোসফ্ট কর্পোরেশন 2007. সমস্ত অধিকার সংরক্ষিত।

বিল্ড শুরু হয়েছে 1.7.2010 8:28:10। নোড 0-তে প্রকল্প "সলিউশনপাথ olution সলিউশন.স্লেন" (পুনর্নির্মাণ টার্গেট টি (গুলি))। সমাধানপথ \ সমাধান.স্লেন: ত্রুটি এমএসবি 4126: নির্দিষ্ট সল ইউশন কনফিগারেশন "রিলিজ | x86" অবৈধ। দয়া করে কনফিগারেশন এবং প্ল্যাটফর্ম বৈশিষ্ট্য (যেমন MSBuild.exe Solution.sln / p: কনফিগারেশন = ডিবাগ / পি: প্ল্যাটফর্ম = "যে কোনও সিপিইউ") ব্যবহার করে একটি বৈধ সমাধান সি অনফিগেরেশন নির্দিষ্ট করুন বা ডিফল্ট সমাধান কনফিগারেশনটি ব্যবহার করার জন্য সেই প্রোপ আরটি ফাঁকা রেখে দিন। সমাপ্ত বিল্ডিং প্রকল্প "সলিউশনপথ \ সমাধান.স্লেন" (পুনর্নির্মাণ টি আরগেটগুলি) - ব্যর্থ।

ব্যর্থ

"সলিউশনপথ olution সলিউশন.স্লেন" (পুনর্নির্মাণ টার্গেট) (1) -> (ভ্যালিডেটসোলিউশন কনফিগারেশন টার্গেট) -> সমাধানপথ \ সমাধান.স্লেন: ত্রুটি এমএসবি 4126: নির্দিষ্ট এস ইলিউশন কনফিগারেশন "রিলিজ | x86" অবৈধ। দয়া করে কনফিগারেশন এবং প্ল্যাটফর্ম বৈশিষ্ট্যগুলি ব্যবহার করে একটি বৈধ সমাধান কনফিগারেশন নির্দিষ্ট করুন (উদাহরণস্বরূপ MSBuild.ex e Solution.sln / p: কনফিগারেশন = ডিবাগ / পি: প্ল্যাটফর্ম = "যে কোনও সিপিইউ") বা ডিফল্ট সমাধান কনফিগারেশনটি ব্যবহার করার জন্য এই প্রো পার্স্টি ফাঁকা ছেড়ে যান।

0 Warning(s)
1 Error(s)

সময় কেটে গেছে 00: 00: 00.03

যদি আমি এটি x86 / x64 এর জন্য দেভেনভের সাথে তৈরির চেষ্টা করি তবে এটি পুরোপুরি কার্যকর হয়, তবে আমি ভিজ্যুয়াল স্টুডিওর সমস্ত প্রয়োজনীয় সংস্করণ ইনস্টল না করে একটি বিল্ড সার্ভার স্থাপন করার চেষ্টা করছি। যাইহোক, যদি আরও ভাল একটি বিনামূল্যে সরঞ্জাম থাকে (এটি। নেট ফ্রেমওয়ার্ক 4 সমর্থন করে) তবে আমি এটি সম্পর্কে শুনতে পছন্দ করব।


1
কিভাবে এটি ব্যর্থ হয়? হয়তো কিছু প্রকল্প x86 প্ল্যাটফর্ম সমর্থন করে না?
ব্রায়ান

3
আপনি কি নিশ্চিত যে আপনার প / প প্রয়োজন নেই: প্ল্যাটফর্ম = "উইন 32"?
অ্যান্ড্রু ওয়াইট

ভবিষ্যতে পাঠকদের এখানে পেয়ে এবং কিভাবে MSBuild এর 2017 সংস্করণ ভিসুয়াল স্টুডিও ইনস্টল ছাড়াই একটি মেশিনে ইনস্টল পেতে হতাশ জন্য, দেখুন এই অন্য প্রশ্ন
ওয়াই হা লি

@ অ্যান্ড্রুওয়াইট - আফাইক - সি ++ Win32যখন মোডেন মোডেন ব্যবহার করে। নেট ব্যবহার করেx86
এলিয়ট উডস

@ এলিয়টউডস - পুনরায় স্পষ্টকরণের জন্য ধন্যবাদ: উইন 32 / এক্স 86 - আমার দৃষ্টিভঙ্গি কেবল সি ++ দৃষ্টিকোণ থেকে হত।
অ্যান্ড্রু ওয়াইট

উত্তর:


106

আপনি যদি x86 এবং x64 এর জন্য নিজের সমাধানটি বানাতে চান তবে আপনার সমাধান দুটি প্ল্যাটফর্মের জন্য কনফিগার করা উচিত। আসলে আপনার কেবল একটি যেকোন সিপিইউ কনফিগারেশন রয়েছে।

কোনও প্রকল্পের জন্য উপলব্ধ কনফিগারেশন কীভাবে চেক করবেন

প্রদত্ত প্রকল্পের জন্য উপলব্ধ কনফিগারেশনটি পরীক্ষা করতে, প্রকল্পের ফাইলটি খুলুন ( *.csprojউদাহরণস্বরূপ) এবং PropertyGroupডানদিকের সাথে সন্ধান করুন Condition

আপনি যদি Releaseমোডে বিল্ড করতে চান তবে x86আপনার অবশ্যই আপনার প্রকল্পের ফাইলে এমন কিছু থাকতে হবে:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  ...
</PropertyGroup>

কীভাবে ভিজ্যুয়াল স্টুডিওতে কনফিগারেশন তৈরি এবং সম্পাদনা করবেন

কনফিগারেশন ম্যানেজার প্যানেল
(সূত্র: মাইক্রোসফট.কম )

নতুন সমাধান প্ল্যাটফর্ম বোতাম
(সূত্র: এমএসডিএন.কম )

নতুন সমাধান প্ল্যাটফর্ম প্যানেল
(সূত্র: এমএসডিএন.কম )

কীভাবে কনফিগারেশন তৈরি এবং সম্পাদনা করবেন (এমএসডিএন তে)


X86 বা x64 ব্যবহারের পার্থক্য কী?
একাজ সোজা

2
x86 32 বিট তৈরি করে dll / এক্সিকিউটেবল এবং x64 বিল্ডস 64 বিটস dll / এক্সিকিউটেবল।
বেনজামিন বাউমান

@ জুলিয়েন কি ভাগ করে নেওয়া কনফিগারেশন সেট আপ করার জন্য আমার .targets ফাইলটি ব্যবহার করতে / করতে পারি?
জানুয়ার 'স্প্লিট' কে।

4
কিছু প্রকল্প উদাহরণস্বরূপ Win32পরিবর্তে ব্যবহার করে x86, CMakeউত্পন্ন প্রকল্পগুলি ( libssh2ব্যবহার CMake) করে।
জেরোয়েন ওয়েয়ার্ট প্লুমাইমারস

211

এমএসবিল্ড বা টিমসিটিতে কমান্ড লাইন ব্যবহার করুন

MSBuild yourproject.sln /property:Configuration=Release /property:Platform=x64

বা সংক্ষিপ্ত ফর্ম ব্যবহার করুন:

MSBuild yourproject.sln /p:Configuration=Release /p:Platform=x64

তবে আপনাকে যাইহোক আপনার প্রকল্পে প্ল্যাটফর্ম সেটআপ করতে হবে, জুলিয়েন হোয়ারাউয়ের উত্তর দেখুন।


কনফিগারেশন এবং প্ল্যাটফর্ম উভয়ই সনাক্ত করার জন্য / সম্পত্তির উপ-সেটিংটি উপলব্ধি করতে পারেনি। ধন্যবাদ
ডিআরপ্প

7
সাবধান হন যে এমএসবাইল্ড ভিজ্যুয়াল স্টুডিও "সমাধান কনফিগারেশনগুলি" বিবেচনা করে না, বরং সমাধানের প্রতিটি প্রকল্পের জন্য xxproj চালানোর আগে বৈশিষ্ট্যগুলি সেট করে। প্ল্যাটফর্ম এবং কনফিগারেশন সমাধানের প্রতিটি প্রকল্পের জন্য সমান হবে, আপনি ভিজ্যুয়াল স্টুডিওতে যে কোনও প্রকল্পের কনফিগারেশন নির্বাচন করেছেন তা বিবেচনা করে নয়।
লরেন্ট এলএ রিজ্জা

2
বা সম্ভবত আরও সংক্ষিপ্ত: / পি: কনফিগারেশন = রিলিজ; যেকোনওথারপ্যারামিটার = Abc123; প্ল্যাটফর্ম = x86
গ্রানাডা কোডার

1
যদি এটি কাউকে সহায়তা করে তবে কমান্ড লাইনে একটি বহুমাত্রিক যুক্তি ডাবল উদ্ধৃতি দিয়ে মোড়ানো হবে। সুতরাং Platform="Any CPU"বা Platform="Mixed Platforms"যাদের এটি প্রয়োজন for
জন দো

14

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

কমান্ড প্রম্পটে টাইপ করুন:

প্ল্যাটফর্ম সেট করুন

একটি ভিএস ২০১২ কমান্ড উইন্ডোতে আমার 'এক্স 64৪' প্রিসেটের মান রয়েছে। এটি আমার সমাধান ফাইলটিতে যা আছে তা হস্তক্ষেপ বলে মনে হচ্ছে।

নিয়মিত কমান্ড উইন্ডোতে, 'সেট' কমান্ডের ফলে "পরিবর্তনশীল সংজ্ঞায়িত" বার্তা আসে ... যা ভাল good

উপরের আপনার 'সেট' কমান্ডের ফলাফল যদি পরিবেশের পরিবর্তনশীল মানটি দেয় না, তবে আপনার উচিত ভাল।


2
এটি অবশ্যই কোনও ভিএস ২০১২ x64 কমান্ড উইন্ডোকে কোনও ভিএস ২০১২ x86 কমান্ড উইন্ডো থেকে আলাদা করা যায়।
আইওডাব্লু

0

ভিএস2017 এবং 2019 এর জন্য ... আধুনিক কোর লাইব্রেরি এসডিকে প্রকল্প ফাইলগুলির সাথে , বিল্ড প্রক্রিয়া চলাকালীন প্ল্যাটফর্মটি পরিবর্তন করা যেতে পারে। anycpuবিল্ট-ইন CoreCompileটাস্কটি চালানোর ঠিক আগে প্ল্যাটফর্মের পরিবর্তনের জন্য এখানে একটি উদাহরণ রয়েছে :

<Project Sdk="Microsoft.NET.Sdk" >

  <Target Name="SwitchToAnyCpu" BeforeTargets="CoreCompile" >
    <Message Text="Current Platform=$(Platform)" />
    <Message Text="Current PlatformTarget=$(PlatformName)" />
    <PropertyGroup>
      <Platform>anycpu</Platform>
      <PlatformTarget>anycpu</PlatformTarget>
    </PropertyGroup>
    <Message Text="New Platform=$(Platform)" />
    <Message Text="New PlatformTarget=$(PlatformTarget)" />
  </Target>

</Project>

আমার ক্ষেত্রে, আমি BeforeTargetsএবং AfterTargetsকার্যগুলি সহ একটি এফপিজিএ তৈরি করছি , তবে মূলত একটি সি # অ্যাপ সংকলন করছি CoreCompile। (আংশিকভাবে আমি কমান্ড-লাইন অ্যাপ্লিকেশনটি একরকম চাইব, এবং আংশিক কারণ আমি কীভাবে বাদ দিতে বা ওভাররাইড করব তা বুঝতে পারি নি CoreCompile)

X86 এবং x64 এর মতো একাধিক, একযোগে বাইনারি তৈরি করতে: পৃথক, ম্যানুয়াল বিল্ড টাস্কের প্রয়োজন হবে বা উপরের উদাহরণে স্বতন্ত্র <PlatformTarget>x86</PlatformTarget>এবং <PlatformTarget>x64</PlatformTarget>সেটিংসের সাথে দুটি পৃথক প্রকল্প ফাইল প্রয়োজন ।

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