كيف يمكنني معرفة ما اذا كان أي ملف في قائمة البند موجودة باستخدام msbuild؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

وأود أن تشغيل مهمة إذا أي ملف في قائمة البند مفقود. كيف أفعل ذلك؟

والنصي بلدي الحالي لديه قائمة من الملفات "مصدر" @ (MyComFiles) أن أترجم قائمة أخرى من الملفات "وجهة" @ (MyInteropLibs)، وذلك باستخدام المهام التالية:

<CombinePath BasePath="$(MyPath)\interop" 
             Paths="@(MyComFiles->'%(filename).%(extension)')">
    <Output TaskParameter="CombinedPaths" 
            ItemName="MyInteropLibs" />
</CombinePath>

وأريد أن تحقق إذا كان أي من الملفات في @ (MyInteropLibs) مفقود وتشغيل مهمة من شأنها أن تخلق لهم.

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

المحلول

وأنا لست من ذوي الخبرة جدا مع MSBuild ذلك قد يكون هناك حلول أفضل من هذا ولكن هل يمكن أن يكتب مهمة FilesExist التي تأخذ قائمة الملفات ويمر كل ملف لFile.Exists إرجاع true إذا كانت موجودة وصحيحة خلاف ذلك، وthenn الرد بناء على نتيجة

وآسف لأنني لا يمكن أن توفر كود للمساعدة، يا بوفرة من MSBuild sytax ليست قوية

نصائح أخرى

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

<Touch Files="@(MyInteropLibs)" AlwaysCreate="True" />

إذا كنت تريد فقط لإنشاء الملفات المفقودة، وتجنب تغيير الطوابع الزمنية من الملفات الموجودة، ثم الخلط يمكن أن تساعد

<Touch Files="%(MyInteropLibs.FullPath)" AlwaysCreate="True" 
       Condition=" ! Exists(%(MyInteropLibs.FullPath)) "/>

إذا كنت ترغب في قائمة الملفات التي تم إنشاؤها ثم

<Touch Files="%(MyInteropLibs.FullPath)" AlwaysCreate="True" 
       Condition=" ! Exists(%(MyInteropLibs.FullPath)) ">
    <Output TaskParameter="TouchedFiles" ItemName="CreatedFiles"/>
</Touch>
<Message Text="Created files = @(CreatedFiles)"/>

ويمكنك معرفة بسهولة جدا باستخدام اكسيك.

لاختبار إذا ALL مجموعة من الملفات موجود: وDOS FOR / D أمر يقبل قائمة مفصولة منقوطة الملفات - أي عنصر مجموعة بالارض

<!-- All exist -->
<Exec
  Command="for /D %%i in (@(MyFiles)) do if not exist %%i exit 1"
  IgnoreExitCode="true">
  <Output TaskParameter="ExitCode" PropertyName="ExistExitCode"/>
</Exec>

لاختبار إذا أي مجموعة من الملفات موجود: يقبل الأمر DIR DOS قائمة مفصولة منقوطة من الملفات. يقوم بتعيين٪ ERRORLEVEL٪ إلى 0 إذا وجد أي ملفات في القائمة، غير صفرية إذا وجد أي منها. (وهذا هو الحال أبسط، لكنها لا <م> لا معالجة مسألة الأصلي ...)

<!-- Any exists -->
<Exec Command="dir /B @(MyFiles)" IgnoreExitCode="true">
  <Output TaskParameter="ExitCode" PropertyName="DirExitCode"/>
</Exec>

وثم الأرجح أنك سوف تحتاج إلى تعريف خاصية منطقية بناء على الإخراج.

تعديل : في BTW هذا هو رائحة التعليمات البرمجية. عادة عندما تجد نفسك الرغبة في القيام بذلك، فإنه إشارة إلى أن يجب تعيين الخاصية مخرجات الهدف لذلك سيتم تنفيذ حلقة عبر العناصر.

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