هل يتعرف Msbuild على أي تكوينات بناء بخلاف DEBUG|RELEASE

StackOverflow https://stackoverflow.com/questions/606660

  •  03-07-2019
  •  | 
  •  

سؤال

لقد قمت بإنشاء تكوين يسمى اختبار عبر Visual Studio والذي يأخذ حاليًا جميع إعدادات DEBUG فقط، ومع ذلك أستخدم شروط برنامج التحويل البرمجي لتحديد بعض الإجراءات المحددة إذا كان البناء هو TEST|DEBUG|RELEASE.

ولكن كيف يمكنني الحصول على البرنامج النصي MSBUILD الخاص بي للكشف عن تكوين الاختبار؟؟

حاليا أقوم بالبناء

 <MSBuild Projects="@(SolutionsToBuild)" Properties="Configuration=$(Configuration);OutDir=$(BuildDir)\Builds\" />

حيث @(SolutionsToBuild) هو الحل الخاص بي.في ال خصائص مشروع MsBuild الشائعة تنص على أن $(Configuration) خاصية شائعة ولكنها تظهر دائمًا فارغة؟

هل هذا يعني أنه لم يتم تعيينه مطلقًا ولكنه ببساطة محجوز لاستخدامي أو أنه يمكنه فقط اكتشاف DEBUG|RELEASE.إذا كان الأمر كذلك، فما الفائدة من السماح بإنشاء تكوينات بناء مختلفة؟

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

المحلول

لم أفعل الكثير في تحديد ملف تكوين MSBUILD ولكني قمت بإنشاء تكوينات مختلفة باستخدام ملف دفعي مثل هذا

msbuild /v:n /p:Configuration=Release "Capture.sln" 
msbuild /v:n /p:Configuration=ReleaseNoUploads "Capture.sln" 

لقد حددت ReleaseNoUploads التكوين داخل Visual Studio.

إليك ما كان علي فعله لذلك (هذا هو Visual Studio 2005):

  • افتح ال خيارات أدوات القائمة، انتقل إلى المشاريع والحلول: عام الخيار، والتحقق عرض تكوينات البناء المتقدمة.
  • ومن هناك اذهب إلى البناء: التكوين قائمة المدير
  • في مربع الحوار المنبثق، انقر فوق تكوين الحل النشط المنسدلة وانقر <جديد...> لإنشاء تكوين بناء جديد.

نصائح أخرى

وبالتأكيد، هل يمكن أن يكون العديد من تكوينات بناء العرف كما تريد تحديد. نرى هذا السؤال ذات الصلة لكيفية قد تبدو الإعداد.

كيفية نشر مشروط لapp.config استنادا إلى تكوين بناء؟

وعندما لاحظ أن 'داخل الاستوديو البصري "، و$ (تكوين) و$ (منصة) يتم تعيين دائما VS باستخدام الاشياء إدارة تكوين في القوائم المنسدلة في الأعلى. في حين إذا كنت ترغب في تعيين هذه القيم باستخدام msbuild من سطر الأوامر، يجب أن يمر في القيم بشكل واضح (كما في @ الجواب MarkBiek ل).

و(قوالب المشروع معظم VS سوف "الافتراضي في 'قيمة للتكوين / منصة، بحيث يمكنك استخدام سطر الأوامر MSBuild دون تحديد هذه القيم بشكل صريح، وهذا أمر جيد، ولكن يجعل هذين خصائص مفيدة / مشتركة تظهر على أكثر قليلا السحرية / غريب مما هي عليه في الواقع.)

وعادة ما أقوم به أن يكون الإصدار والتصحيح على حد سواء بناء من برنامج نصي MSBuild واحد هو:

<PropertyGroup Condition="'$(Configuration)'==''">
  <Configuration>Debug;Release</Configuration>
</PropertyGroup>

ثم يضاف هذا ولكن من MSBuild الخلطة السرية:

   <Target Name="configurations">
     <CreateItem Include="$(Configuration)">
       <Output TaskParameter="Include" ItemName="Configuration" />
     </CreateItem>
   </Target>

وبعد ذلك لكل هدف تفعل شيئا مثل هذا:

  <Target Name="Compile" DependsOnTargets="configurations" Inputs="@(Configuration)" Outputs="target\%(Configuration.FileName)">
    <MSBuild Projects="@(MyProjects)" Targets="Build" Properties="Configuration=%(Configuration.Identity);WarningLevel=1" />
  </Target>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top