2012-06-25 126 views
1

我是MSBuild的初學者。到目前爲止,我已經能夠創建一個名爲「MakeTextFile」的自定義任務,它根據您傳遞它的內容屬性在C:\中創建一個文本文件。這是從命令行提示符運行的。如何在Visual Studio中使用自定義構建操作中的.targets文件?

我也包括這在我的.targets文件(項目標籤下):

<ItemGroup> 
    <AvailableItemName Include="CreateTextFileAction" /> 
</ItemGroup> 

當我使用導入標籤上的.csproj我現在可以設置的項目建設行動「CreateTextFileAction我的客戶端應用程序',但是這個動作永遠不會觸發(因爲C:\上沒有文本文件)

如何獲取標記有我的構建操作'CreateTextFileAction'的項目的所有文件路徑並將它們傳遞到我的自定義任務?

作爲參考,我.targets文件:

<?xml version="1.0" encoding="utf-8" ?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
     <AvailableItemName Include="CreateTextFileAction" /> 
    </ItemGroup> 

    <UsingTask AssemblyFile="CustomMSBuildTask.dll" TaskName="CustomMSBuildTask.MakeTextFile" /> 


    <Target Name="MyTarget"> 
     <MakeTextFile Contents="TODO HOW DO I GRAB MARKED FILES?" /> 
    </Target> 
</Project> 

回答

1

一個的csproj文件已定義的一組目標。三個主要入口點是構建,重建和清潔。這些目標每個都有一組依賴關係。如果您將自己的目標編寫爲標準csproj構建的一部分,則需要在這些依賴關係中找到合適的注入點。

爲了便於使用,有兩個標準目標供您重寫,稱爲BeforeBuild和AfterBuild。如果你在csproj文件中定義了這個(在導入csharp目標文件之後),並在那裏調用你的自定義任務,那麼它應該可以工作(或者至少可以進一步移動)。

<Target Name="BeforeBuild"> 
     <MakeTextFile Contents="TODO HOW DO I GRAB MARKED FILES?" /> 
    </Target> 
相關問題