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

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

  •  22-08-2019
  •  | 
  •  

سؤال

واني اسعى الى بناء وثائق طلبي باستخدام القلعة الرملية مساعدة باني ملف. شرط واحد هو أن لا بد لي من تحديد مصدر ثائق منها مثلا:

<DocumentationSources>
    <DocumentationSource sourceFile="@(DocumentationSourceFiles)" xmlns="" />
</DocumentationSources>

ولقد تعرف @ (DocumentationSourceFiles) في ملف منفصل كما يلي:

  <ItemGroup>
     <DocumentationSourceFiles Include="..\src\**\*.exe"></DocumentationSourceFiles>
  </ItemGroup>

وبعد ذلك استيراد هذا الملف في ملف .shfbproj واستخدامه كما هو مذكور أعلاه. والمشكلة هي أن @ (DocumentationSourceFiles) لم يتم التعرف على قائمة من البنود ولكن مجرد كسلسلة. أفعل أي شيء خطأ؟ إذا كان لي أن تغيير @ (DocumentationSourceFiles) إلى خاصية مع قيمة واحدة مثل:

<PropertyGroup>
    <DocumentationSourceFiles>S:\SVN\myApp\src\myAppName\Debug\bin\myApp</DocumentationSourceFiles>
</PropertyGroup>

وبعد ذلك استخدام:

<DocumentationSources>
    <DocumentationSource sourceFile="$(DocumentationSourceFiles)" xmlns="" />
</DocumentationSources>

كل شيء يعمل بشكل جيد. أي أفكار؟

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

المحلول

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

وباستخدام @ تدوين (myType) يسمح مجموعة من العناصر من نوع myType أن توسع إلى فاصلة منقوطة (؛) قائمة سلاسل محددة، والتي تم تمريرها إلى المعلمة. إذا كانت المعلمة من نوع السلسلة، ثم قيمة المعلمة لائحة عناصر مفصولة بفواصل منقوطة. إذا كانت المعلمة مجموعة من الاوتار (سلسلة [])، يتم إدخال كل عنصر في مجموعة استنادا إلى موقع منقوطة. إذا كانت المعلمة مهمة من نوع ITaskItem []، والقيمة هي محتويات هذا البند مع جمع أي بيانات التعريف المرفقة. لتحديد كل بند مع حرف آخر غير منقوطة، استخدم بناء الجملة @ (myType، 'الفاصل').

إذا كنت تريد أن يكون كل عنصر على حدة، استخدم تدوين بيانات التعريف: <م>٪ (ItemCollectionName.ItemMetaDataName)

<ItemGroup>
  <DocumentationSourceFiles Include="..\src\**\*.exe"></DocumentationSourceFiles>
</ItemGroup>

<Target Name="TestItem">
  <Message Text="Using @ Notation"/>
  <Message Text="@(DocumentationSourceFiles)"/>
  <Message Text="Using Metadata Notation"/>
  <Message Text="%(DocumentationSourceFiles.RecursiveDir)%(Filename)%(Extension)"/>
</Target>

> Output:
Using @ Notation
..\src\doc1.exe;..\src\doc2.exe;..\src\subdir\doc3.exe
Using Metadata Notation
..\src\doc1.exe
..\src\doc2.exe
..\src\subdir\doc3.exe
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top