الحصول على هدف للتشغيل قبل تشغيل أي شيء آخر عند البناء من Visual Studio

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

سؤال

أحاول الحصول على هدف مكلف لمرة واحدة فقط للتشغيل فقط عند بناء مشروع معين من المستوى الأعلى (يحتوي على العديد من التبعيات).

ليس لدي مشكلة في الحصول على هذا العمل من إنشاء سطر MSBUILD / أوامر. أقوم بذلك من خلال الإعداد والأدوات الأولية في المشروع ، أو بدلاً من ذلك

<قبل Build />.

الجزء الصعب مع Visual Studio. عندما أقوم ببناء نفس المشروع من VS. يقوم VS بتشغيل التبعيات قبل استدعاء .csproj الخاص بي ، وبالتالي فإن هدفي (الذي يؤثر على كيفية بناء المشاريع الأخرى) لا يمكن تشغيله حتى يتم بناؤها بالفعل.

هل هناك بعض الشيء لإجبار VS على تشغيل هدف قبل استدعاء التبعيات؟

أنا أعمل حاليًا حول هذا ، من خلال تشغيل نفس الهدف المكلف من أكثر مشروعي منخفض المستوى (المشروع الذي يتم بناؤه دائمًا ...) باستخدام:

الحالة = "$ (buildinginsidevisualstudio)"

أي أفكار حول كيفية القيام بذلك "بشكل صحيح"؟ مرة أخرى ، أنا أبحث عن حل سيعمل من VS.

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

المحلول

الطريقة الوحيدة للقيام بذلك (إذا فهمت السؤال) هي إنشاء مشروع وهمية ، والتي تخبرها مقابل البناء أولاً ، وهذا يفعل ما تريد. سوف تقبل VS أي ملف msbuild إلى حد كبير إذا أعطيته امتداد .csproj وهدف البناء.

نصائح أخرى

يستخدم Visual Studio برنامج التحويل البرمجي في Proc للمساعدة في UX من عملية الإنشاء. لأن هذا يمكن أن يكون هناك بعض الفرق بين VS و MSBuild. حاول تعيين خاصية usehostCompilerIfavavaiLaive إلى false في ملف المشروع الخاص بك. هذا سوف يجبر مقابل استخدام MSBuild للبناء. العيب هو الأداء داخل Visual Studio.

يمكنك استخدام Follwing Frganing في ملف .csproj (أو .vbproj).

<PropertyGroup>
    <UseHostCompilerIfAvailable>false</UseHostCompilerIfAvailable>
</PropertyGroup>

لماذا لا تجاوز <Target Name="BeforeBuild" /> هدف؟ سيتم تنفيذ ذلك قبل المبنى الفعلي للمشروع (منذ Build الهدف يعتمد على BeforeBuild). تقوم Visual Studio باستدعاء هدف البناء (أو إعادة البناء) ، لذلك فإن تجاوز هذا الهدف في .csproj سيؤدي إلى استدعاءه أولاً.

إلا إذا كنت تبحث عن القيام بشيء ما قبل ذلك في MSBuild؟

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