سؤال

ولقد سعيت لجعل مهمة في بلدي TFS يبني أكثر عمومية، واحدة من الأشياء التي أحاول القيام به هو نسخ بعض الملفات إلى دلائل مختلفة تبعا للبناء باستخدام المهمة. I غازل مع فكرة استخدام الخصائص، ولكن لم أستطع التفكير في طريقة للقيام بذلك نظيفة، لذلك حاولت أن يذهب مع باستخدام البيانات البند، ولقد كنت قادرا على القيام بذلك في مكان آخر في نفس الملف الهدف أنا أعمل على، فقط هذه المرة، كنت ترغب في استخدام الممتلكات.

وهنا ما أريد القيام به:

<ItemGroup>
  <DestinationParent Include="$(DeploymentPath)">
    <DestinationParentPath>$(DeploymentPath)</QuartzParentPath>
  </DestinationParent>
</ItemGroup>

وفي وقت لاحق بناء، حاولت لنسخ بعض الملفات إلى مجلد الوجهة عن طريق الرجوع إلى التعريف البند:

<Copy SourceFiles="@(FilesToCopy)" DestinationFiles="@(FilesToCopy-&gt;'%(DestinationParentPath)\Destination\%(RecursiveDir)%(Filename)%(Extension)')" ContinueOnError="false" ></Copy>

ومما يؤسف له، بعد تشغيل بناء، يا BuildLog تبين ما يلي:

Copying file from "$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)\<File being copied>" to "\Destination\<File being copied>".

و٪ (DestinationParentPath) وسعت إلى سلسلة فارغة، لأي سبب من الأسباب. استخدام٪ (DestinationParent.DestinationParentPath) أنتجت خطأ، وقال لي أنني يجب أن يكون ببساطة باستخدام٪ (DestinationParentPath). يتم توسيع $ (DeploymentPath) إلى سلسلة الصحيح كما هو متوقع في عدة أماكن أخرى في الإنشاء.

وهناك مصدر آخر للالتباس هو أن استخدام٪ (ConfigurationToBuild.FlavorToBuild) أسفرت عن القيمة الصحيحة، أي اختبار، كما يمكن أن يرى في ما يلي:

وتحرير: ويعرف هذا في إطار مشروع عقدة الجذر، في حين يتم تعريف ItemGroup مع DestinationParentPath تحت عقدة الهدف. هل هذا أيضا جعل الفرق؟

<ItemGroup>
  <ConfigurationToBuild Include="Test|Any CPU">
    <FlavorToBuild>Test</FlavorToBuild>
    <PlatformToBuild>Any CPU</PlatformToBuild>
  </ConfigurationToBuild>
</ItemGroup>

ولا يبدو كما لو تضمين السمة ذات الصلة عندما كنت ترغب فقط في السلسلة في التعريف هذا البند منذ وأنا متأكد من "اختبار | أي وحدة المعالجة المركزية". لا تشير أي ملف الفعلي

وهكذا مرة أخرى، لماذا هو٪ (DestinationParentPath) التوسع لسلسلة فارغة؟

وتحرير: نسيت أن أذكر أنني حاولت أيضا من الصعب الترميز المسار الفعلي للDestinationParentPath، ولكن هذا لا يزال أسفرت٪ (DestinationParentPath) التوسع لسلسلة فارغة

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

المحلول

<اقتباس فقرة>   

وتحرير: ويعرف هذا في إطار مشروع عقدة الجذر، في حين يتم تعريف ItemGroup مع DestinationParentPath تحت عقدة الهدف. هل هذا أيضا جعل الفرق؟

نعم، هذا يحدث فرقا. القدرة على تعريف ItemGroup داخل الهدف هو جديد لmsbuild 3.5. وعلى الرغم تبحث التعريفي، انها أعدم فعلا في وقت التشغيل تماما كما لو كنت يسمى أسلوب المهام CreateItem بصورة / CreateProperty القديمة. أن يؤدي وحده إلى المشاكل المحتملة: تحتاج إلى أخذها في الاعتبار عند المهمة التي تحتوي هي (أولا) يسمى. ترتيب العمليات ليست واضحة إلى عاريا دائما العين . قد يكون من الحكمة لجعل هذه المهمة حيث يمكنك استخدام٪ (DestinationParentPath) تعتمد على المهمة حيث إنشائه، حتى لو لم يكن هناك "منطقية" التبعية.

وبالإضافة إلى ذلك، هناك msbuild الاستطلاعية المراوغات / البق القديمة. خصائص إنشاؤه بشكل حيوي والعناصر هي غير مرئية للمهام "الأخوة" . أيضا، البنود التي تم تحديثها في متداخلة يبني ليست فقاعات دائما .

تحقق من الحلول في وصلات، ويجب أن تكون قادرة على العثور على شيء أن يعمل لديك حتى لو كان رديء.

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