2015-11-10 4 views
0

Я создал файл DLL, который анализирует файл WSDL me и сохраняет его в других файлах. Файл называется WsdlParser.dll. Входные параметры: входной файл, выходной файл, элемент и родительский элемент. Мне нужно создать другую программу, чтобы вызвать эту DLL и ввести данные для MSBuild (мне нужно создать в другой программе для создания этих файлов из WSDL) .Method parser me для создания новых файлов. Я создал проект, где я поставил ссылку 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. Измените файл проекта для вызова PreBuild Target, например, добавить данной ГЭ конец файла:

    <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

Спасибо, я использовал этот первый вариант –

Смежные вопросы