سؤال

أنا باستخدام MSBuild (عبر نانت) تجميع مجموعة من VB.NET الجمعيات.لأن هذه الجمعيات تعتمد على Interop COM, أنا بحاجة إلى ضمان تشغيل في وضع 32 بت على 64 بت نظام التشغيل.يمكنني الحصول على الملف القابل للتنفيذ الجمعيات ترجمة إلى 32-بت من خلال تغيير المشروع في Visual Studio, ولكن أود حقا أن تكون قادرة على إجبار جميع الملفات التنفيذية التي سيتم تجميعها إلى 32 بت على بناء الخادم.

لقد حاولت عدد من معلمات سطر الأوامر إلى MSBuild مع أي حظ:

  • /ص:منصة=win32
  • /ص:منصة=x86
  • /ص:ProcessorArchitecture=x86

ما الخطأ الذي فعلته ؟ هناك بعض الإشارة إلى الخصائص التي MSBuild يستخدم عند ترجمة VB المشاريع ؟

هل كانت مفيدة؟

المحلول

إذا كانت الجمعيات هي نفسها دائما ما يكون 32 بت, لماذا لا تضيف الإعداد .vbproj الملف ؟ التي سوف تتخذ MSBuild من المعادلة.

فقط قم بإضافة السطر التالي إلى الأولي PropertyGroup في .vbproj الملف

<PlatformTarget>x86</PlatformTarget>

نصائح أخرى

وفقا MSDN, أنت تفعل الشيء الصحيح.يبدو /p:Platform=x86, لكن في الواقع ربما هو /p:PlatformTarget=x86.

محاولة فقط الاحتجاج MSBuild مباشرة مع المعلمة (تأكد من انها ليست مشكلة مع نانت الملف.نظرة على بناء إخراج الحق في بناء التكوين (التصحيح / الإصدار).

فقط في هذه الحالة يساعد, أنا استخدم هذا فلكس لبناء x86 الهدف:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86

في "مستكشف الحلول" انقر بزر الماوس الأيمن على عقدة الجذر -> إدارة التكوين.تحتاج إلى تحديد الحل نطاق التكوين الذي يرشد كل مشروع داخل لبناء 32-بت.(ملاحظة:ربما لديك بالفعل واحدة إذا كنت من أي وقت مضى مجموعة على الأقل مشروع واحد لبناء 32-بت.) خطوة بخطوة تجول راجع MSDN بلوق وظيفة الحل تكوينات.

ثم تحديد المطلوب "منصة" و "نكهة" في فريق بناء .proj / .targets ملفات.على سبيل المثال:

<ConfigurationToBuild Include="Release|x86">
    <FlavorToBuild>Release</FlavorToBuild>
    <PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>

يمكنك تحديد واحد أو أكثر من هذه المنشأة أقسام إلى عدة مجموعات بناء.أود أن نسخ/لصق "بالإفراج عن|x86" سلسلة (أو ما يبدو) مباشرة من هاتفك .sln الملف للتأكد من أنه يطابق تماما -- لا يمكنك الحصول عليه مباشرة من مستكشف الحلول.

بخصوص تعليقك:

MSBuild تقييم الممتلكات هي معقدة جدا لأنه يمزج التعريفي بد من الأساليب.انظر بلوق وظيفة MSBuild تقييم الممتلكات للحصول على التفاصيل.أنا أفضل عدم الاعتماد على الخفايا.

صحيح أن الخصائص المحددة في سطر الأوامر يجب تجاوز كل شيء آخر ، ولكن فريق بناء طبقة أخرى من التعقيد. على ComputeConfigurationList المهمة دعا مرارا وتكرارا عن طريق العودية MSBuild invokation لا عادي المهمة.طريقة تسحب هذا هو أن تأخذ العادية خصائص مثل PlatformToBuild والتفاف عليها في مجموعة العالمي خصائص يسمى ConfigurationToBuild.PlatformToBuild (.... الخ) والتي يتم إنشاؤها على الطاير, مرة واحدة لكل التكوين.هذا يجعل الفريق بناء المحرك أكثر مرونة داخليا ، ولكنه أيضا يجعل القرصنة سطر الأوامر السلوك تريد أكثر صعوبة.

قد تتمكن من محاولة وضع ConfigurationToBuild.PlatformToBuild على سطر الأوامر مباشرة-أنه قد عمل, أنا لست متأكدا.ولكن بالتأكيد سوف تمنعك من أي وقت مضى بناء على تكوين واحد أو أكثر في واحد بناء التعريف.لهذا السبب أنا العالقة مع نصيحتي أعلاه.

بعد تعاني من نفس المشكلة ، لقد تحولت من استخدام إصدار MSBuild في C:\WINDOWS\Microsoft.NET\Framework64...إلى الإصدار في C:\WINDOWS\Microsoft.NET\Framework (لا 64) و أشياء جمعت ما يرام.

بالنسبة MSBuild الإصدار 15 هو /ص:PlatformTarget=x86

في نانت msbuild-مهمة الإجابة على هذا السؤال:

<msbuild project="your.sln">
    <property name="PlatformTarget" value="x86" />
</msbuild>

طريقة أكثر عملية في استخدام للعثور على حق الملكية عن طريق فتح أحد .csproj المشروع الملف (في حالة c#) و انظر الممتلكات التي يتأثر عند تحديد "x64" / "AnyCPU" / "x86" من Visual stdio.الممتلكات أيا كان أن يتم تغيير, تحتاج إلى تعيين من سطر الأوامر.مع Visual studio 2015 يبدو أن <Platform>.حتى تتمكن من استدعاء msbuild مع الحجة /ص:منصة=x64 وينبغي أن تعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top