2015-11-10 116 views
0

我創建了一個解析WSDL me文件並將其保存到其他文件的.dll文件。 文件被稱爲WsdlParser.dll。 輸入參數是:輸入文件,輸出文件,元素和父元素。 我需要建立另一個程序來調用這個我的dll並輸入MSBuild的數據(我需要在另一個程序中構建來從WSDL創建這些文件)。方法解析器創建新文件。我創建了一個項目,我把參考Microsoft.Build.Framework,Microsoft.Build.Utulities,WsdlParser。自定義任務MSBuild

namespace MyParserBuild 
{ 
    public class ParserClass : Task 
    { 
     private string input; 
     private string output; 
     private string element; 
     private string parentElement; 

     public override bool Execute() 
     { 
      try 
      { 
       WsdlParser.Parser parse = new WsdlParser.Parser(input, output); 
       parse.Parse(parentElement, element); 
      } 

      catch (Exception e) 
      { 
       Console.WriteLine(e); 
       return false; 
      } 
      return true; 
     } 

     /* Properties */ 
     [Required] 
     public string Input 
     { 
      get { return input; } 
      set { input = value; } 
     } 

     [Required] 
     public string Output 
     { 
      get { return output; } 
      set { output = value; } 
     } 

     [Required] 
     public string Element 
     { 
      get { return element; } 
      set { element = value; } 
     } 

     [Required] 
     public string ParentElement 
     { 
      get { return parentElement; } 
      set { parentElement = value; } 
     } 
    } 
} 

我創建一個XML文件命名MyBuild.targets

<?xml version="1.0" encoding="utf-8" ?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <UsingTask TaskName="MyParserBuild.ParserClass" AssemblyFile="C:\Work\Common code\MyCode\MyParserBuild\MyParserBuild\bin\Debug\MyParserBuild.dll"/> 

    <!--Variable--> 
    <PropertyGroup> 
    <PG_Input>C:\Work\Common code\MyCode\MyParserBuild\MyParserBuild\MyWSDLFile2.wsdl</PG_Input> 
    <PG_Output>C:\Users\Administrator\Desktop\test</PG_Output> 
    <PG_Element>schema</PG_Element> 
    <PG_ParentElement>types</PG_ParentElement> 
    </PropertyGroup> 

    <Target Name="PreBuild"> 
    <ParserClass Input="$(PG_Input)" 
       Output="$(PG_Output)" 
       Element="$(PG_Element)" 
       ParentElement="$(PG_ParentElement)" /> 
    </Target> 
</Project> 

最後,我把這個目標變成.csproj的其他程序。

<Import Project="C:\Work\Common code\MyCode\MyParserBuild\MyParserBuild\MyBuild.targets"/> 

我的問題是,當我建立另一個程序不會從WSDL創建這些文件。

回答

0

您只導入了項目,但沒有添加任何可以使目標被調用的內容:這不是因爲目標被命名爲「PreBuild」,它將用作預構建事件。要做到這一點有幾個選項,這裏有兩個:

  1. 修改項目文件來調用預生成目標,比如加入這等文件的末尾:

    <Target Name="BeforeBuild" DependsOnTargets="PreBuild"> 
    </Target> 
    
  2. 使用PreBuildEvent調用目標PreBuild。預生成事件就像在命令行上一樣運行。在Visual Studio中,右鍵單擊該項目,選擇「屬性」,然後選擇「構建事件」。輸入

    msbuild MyBuild.targets /t:PreBuild 
    

    在這種情況下,您不需要在項目中導入MyBuild.targets。

注意:使用絕對路徑如C:\Work\Common code\MyCode\...不是一個好主意。如果您將代碼複製到另一個位置,一切都會中斷。最好弄清楚你將堅持使用的目錄結構,並使用該結構中的相對路徑,或者將所有參數設置爲$(CommonCodePath)\MyBuild.targets,並將CommonCodePath作爲屬性傳遞給msbuild左右。

+0

謝謝,我用了第一個選項 –

相關問題