Warum wird ein Eigenschaftswert der Arbeit, wenn wird als Attributwert und den Artikel nicht finden Wert in msbuild verwendet?

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

  •  22-08-2019
  •  | 
  •  

Frage

Ich versuche, die Dokumentation für meine Anwendung erstellen mit Sandcastle Help Builder Datei. Eine Voraussetzung ist, dass ich die Dokumentation Quelle für z angeben muß.

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

Ich habe definiert @ (DocumentationSourceFiles) in einer separaten Datei wie folgt:

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

ich importiert diese Datei dann in der .shfbproj Datei und verwendet sie, wie oben angegeben. Das Problem ist, dass @ (DocumentationSourceFiles) nicht als eine Liste von Elementen erkannt zu werden, sondern lediglich als String zurück. Mache ich etwas falsch? Wenn ich @ (DocumentationSourceFiles) ändern in eine Immobilie mit einem einzigen Wert wie:

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

Und dann verwenden:

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

Alles funktioniert gut. Irgendwelche Ideen?

War es hilfreich?

Lösung

  

Mit der Notation @ (myType) erlaubt eine Sammlung von Gegenständen des Typs myType in ein Semikolon erweitert werden (;) getrennte Liste von Strings, und an einen Parameter übergeben. Wenn die Parameter vom Typ String ist, dann wird der Wert des Parameters ist die Liste der Elemente, die durch Semikolons getrennt ist. Wenn die Parameter ein String-Array ist (String []) wird jedes Element in die Anordnung eingefügt basierend auf dem Standort der Semikolons. Wenn die Task-Parameter vom Typ ist ITaskItem [], ist der Wert der Inhalt der Artikel-Sammlung mit beliebigen Metadaten beigefügt. Um jedes Element mit einem anderen Zeichen als ein Semikolon abgrenzen, die Syntax @ (myType, ‚separator‘).

Wenn Sie jedes Element separat haben wollen, verwenden Sie die Metadaten-Notation: % (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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top