2016-06-16 26 views
0

Ich habe die folgende benutzerdefinierte Inline-Aufgabe, die in einer Windows-Umgebung bauen funktioniert:Mit Microsoft.Build.Tasks in msbuild + xbuild

<UsingTask 
    TaskName="Name" 
    TaskFactory="CodeTaskFactory" 
    AssemblyFile="C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll"> 
    <ParameterGroup> 
     ... 
    </ParameterGroup> 
    <Task> 
     <Code Type="Fragment" Language="cs"> 
      ... 
     </Code> 
    </Task> 
</UsingTask> 

Ich möchte dies auch mit xbuild arbeiten. Dies wird offensichtlich nicht funktionieren, da der Pfad windowsspezifisch ist, also habe ich auch versucht, AssemblyName="Microsoft.Build.Tasks" zu verwenden, was auch nicht funktioniert hat.

Also, wie sollte ich Microsoft.Build.Tasks in meiner benutzerdefinierten Aufgabe in einer Weise referenzieren, die für Msbuild und Xbuild funktionieren würde?

Antwort

1

Mit AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v12.0.dll" löste das Problem.

Sieht aus wie $(MSBuildToolsPath) ist auf was immer geeignet ist abhängig von der laufenden Plattform eingestellt, so wird es immer funktionieren. Außerdem musste ich speziell v12.0 verwenden, v4.0 funktionierte nicht.