Использовать задачу сборки XSD в проекте c # - PullRequest
4 голосов
/ 05 марта 2010

Как я могу использовать C ++ XSD Task в проекте c #? Я уже создал задачу в файле csproj следующим образом:

  <Target Name="BeforeBuild">
    <XSD Namespace="$(RootNamespace).Xml" Language="CS" GenerateFromSchema="classes" Sources="Xml/schema.xsd" />
  </Target>

но вывод сборки говорит, хотя intellisense предлагает мне задачу XSD при редактировании файла проекта:

Error   1   The "XSD" task was not found. Check the following: 
1.) The name of the task in the project file is the same as the name of the task class. 
2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "C:\Windows\Microsoft.NET\Framework\v4.0.30128" directory. MyProject.csproj

О, и я использую Visual Studio 2010 RC.

*

Ответы [ 5 ]

4 голосов
/ 24 июля 2015

Немного улучшенная версия / подход заключается в использовании следующего в общем файле .targets:

<!-- Establish the proper $(CPPTasks) location -->
<Choose>
  <When Condition=" '_$(VisualStudioVersion)'=='_11.0' " >
    <PropertyGroup>
        <CPPTasks>V110\Microsoft.Build.CPPTasks.Common.v110.dll</CPPTasks>
    </PropertyGroup>
  </When>
  <Otherwise>
    <PropertyGroup>
        <CPPTasks>Microsoft.Build.CPPTasks.Common.dll</CPPTasks>
    </PropertyGroup>
  </Otherwise>
</Choose>

Тогда в вашем .csproj вы можете сделать следующее:

<UsingTask TaskName="XSD" AssemblyFile="$(VCTargetsPath)$(CPPTasks)" />

Обратите внимание, что это было проверено в VS2010, VS2011, VS2013 (имена DLL переключаются назад и вперед в зависимости от установленной версии VS.: (

Улучшение состоит в том, что только в одном месте содержится логика для правильного пути и имени DLL, а не отдельные файлы .csproj.

4 голосов
/ 29 апреля 2010

Это потому, что цели C ++ не импортируются. Потому что XSD не является одной из задач по умолчанию, определенных процессом управляемой сборки. вам нужно добавить UsingTask для ссылки на него. Добавьте это в ваш файл csproj:

<UsingTask TaskName="XSD" AssemblyName="Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

Удачи, Джейми

2 голосов
/ 19 декабря 2014

Получил работать с немного другим синтаксисом. Это использует VS 2012 Update 4.

Что сработало:

<UsingTask TaskName="XSD" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft.Cpp\v4.0\V110\Microsoft.Build.CPPTasks.Common.v110.dll" />
<Target Name="BeforeBuild">
    <Message Text="Generating serialization class(es)..." />
    <ItemGroup>
        <_SerializationFile Include="$(ProjectDir)My_Xsd_File.cs" />
    </ItemGroup>
    <XSD Condition="!Exists('@(_SerializationFile)')" GenerateFromSchema="classes" Language="CS" Namespace="$(RootNamespace)" Sources="My.Xsd.File.xsd" />
</Target>

В моем случае я использовал прямой AssemblyFile атрибут UsingTask. Также обратите внимание, что встроенные символы . в имени XSD также были преобразованы в символы _.

1 голос
/ 03 ноября 2014

Добавьте это в ваш файл проекта:

<UsingTask TaskName="XSD" AssemblyName="Microsoft.Build.CppTasks.Common, Version=4.0.0.0,         Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
 <Target Name="BeforeBuild">
  <XSD Sources="MySchema.xsd" GenerateFromSchema="classes" Language="CS">
  </XSD>
 </Target>

Пожалуйста, посмотрите вопрос Используя задачу XSD, я получаю MSB0001: Внутренняя ошибка MSBuild: неожиданно xsd.exe не является корневым путем

И добавьте путь к файлам xsd.exe и Microsoft.Build.CppTasks.Common.dll в переменную среды, перезагрузите компьютер. Он снова работает нормально.

Путь к xsd.exe и Microsoft.Build.CppTasks.Common.dll:

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools \; C: \ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0

Или вы можете добавить следующую командную строку в событие Pre-build, чтобы добиться этого:

xsd.exe /classes /language:CS MySchema.xsd
0 голосов
/ 06 марта 2010

Забудьте бит C ++, это отвлекает от заголовка страницы MSDN. Инструмент называется Инструмент определения схемы XML (Xsd.exe) и предназначен для создания схемы или кода.

Чтобы продолжить отладку, установите для уровня ведения журнала msbuild значение / versbosity: диагностика и посмотрите, какие заголовки (импортированная задача MSBUILD определяет ее извлечение).

...