在c#项目中使用XSD Build任务

如何在ac #project中使用c ++ XSD Task ? 我已经在csproj文件中创建了这样的任务:

   

但是构建输出说,尽管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  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。

*

忘记C ++位,这是对msdn页面标题的干扰。 该工具称为XML架构定义工具(Xsd.exe) ,用于创建架构或代码。

要进一步调试,请将您的msbuild日志记录级别设置为/ versbosity:diagnostic并查看哪些标头(导入的MSBUILD任务定义)。

这是因为不导入C ++目标。 因为XSD不是托管构建过程定义的默认任务之一。 你需要添加一个UsingTask来引用它。 将其添加到您的csproj文件:

  

好运,杰米

稍微改进的版本/方法是在常见的.targets文件中使用以下内容:

     V110\Microsoft.Build.CPPTasks.Common.v110.dll     Microsoft.Build.CPPTasks.Common.dll    

然后在.csproj中,您可以执行以下操作:

  

请注意,这已在VS2010,VS2011,VS2013中进行了测试(DLL名称来回切换,具体取决于安装的VS版本。:(

改进之处在于只有一个地方包含正确的DLL路径和名称的逻辑,而不是单独的.csproj文件。

得到它使用略有不同的语法。 这是使用VS 2012 Update 4。

什么有效:

     <_serializationfile Include="$(ProjectDir)My_Xsd_File.cs">    

在我的例子中,我在UsingTask上使用了直接的AssemblyFile属性。 还要注意嵌入式. XSD名称中的字符也被转换为_字符。

将其添加到项目文件中:

      

请查看问题使用XSD任务我得到MSB0001:内部MSBuild错误:xsd.exe意外不是root路径

并将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