msbuild parse metadata
سؤال
هل هناك على أي حال لتعديل كل عنصر في مجموعة عنصر؟ على سبيل المثال ، بالنظر إلى هذا العنصر:
<_CustomAreas Include="..\My.Project.*\Areas\**\*.*" Condition="'$(AppBuildFolder)' == ''" />
أرغب في إزالة ".. my.product.* جزء. في الأساس لدينا مشروع منفصل يحتوي :
<FilesForPackagingFromProject Include="%(_CustomAreas.Identity)">
<DestinationRelativePath>Areas\%(relativedir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
$(relativedir)
قادم من خلال ".. my.project.plugin1 المناطق**."وينتهي الأمر في الحزمة ZipFileRoot\My.Project.Plugin1\Areas
(يتراجع عن المناطق المتشددين ، ثم ينشئ المجلد للمساعد المناطق) حيث أود أن ينتهي به الأمر بالفعل ZipFileRoot\Areas
.
شكرا آندي
المحلول
ال regexreplace (بيانات الاعتماد: يجب أن تكون مهمة الضيف/الضيف) قادرة على المطابقة \My.Product.*
واستبداله بسلسلة فارغة.
شيء من هذا القبيل يجب أن يعمل: (لم يتم اختباره ، تحتاج إلى التحقق من الهروب)
<RegexReplace Input="%(_CustomAreas)" Expression="\\My\.Product\..*" Replacement="" Count="-1">
<Output ItemName="_CustomAreas" TaskParameter="Output" />
</RegexReplace>
هناك القليل من العمل للحصول على MSBUILD المهام المجتمع الجري ، ولكن ما يكفي من الأشياء الجيدة هناك لأجد أنه يستحق كل هذا الجهد.
نصائح أخرى
باستخدام MSBuild 4.0 ، يمكنك استخدام طرق السلسلة مباشرة في البرنامج النصي (أو استخدام المهام المضمنة). مع هذا الخيار ، يمكنك تعديل yoursivedir الخاص بك لحذف جزء my.project.*.
يمكنك رؤية أمثلة في هذه المقالة: http://sedodream.com/2010/03/07/msbuild40propertyfunctionspart1.aspx
يمكن أن تحتوي العناصر الموجودة في مجموعات العناصر على سمة استبعاد تتيح لك تحديد العناصر التي يجب تركها.