【发布时间】:2017-09-24 05:26:19
【问题描述】:
我正在使用 MSBuild 社区任务来运行 Xsd.exe 作为我在 Visual Studio 中构建的一部分,如下所示:
<Import Project="$(SolutionDir)Common.targets" />
<PropertyGroup>
<MSBuildCommunityTasksPath>$(SolutionDir)TeamBuildTypes</MSBuildCommunityTasksPath>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
<UsingTask TaskName="XSD" AssemblyFile="$(VCTargetsPath)$(CPPTasks)" />
<Target Name="BeforeBuild">
<!--Exec Command="'$(DevEnvDir)..\Tools\vsvars32.bat'" /-->
<XSD Sources="MySchema.xsd" GenerateFromSchema="classes" Language="CS" />
</Target>
Common.targets 与 here 一致。
但是,我在构建过程中收到以下错误:
“XSD”任务意外失败。
Microsoft.Build.Shared.InternalErrorException:MSB0001:内部 MSBuild 错误:xsd.exe 意外不是根路径
MSDN论坛here已经给出了解决方案,就是在path环境变量中添加xsd.exe的路径。但是,正如 Pico Ohms 的回答所表明的那样,这是不可维护的,因为它依赖于版本,并且需要每个开发人员执行额外的步骤才能构建,只是因为 Xsd.exe。
我找到了另一个解决方案here,即事先调用 vsvars32.bat。这是上面代码中被注释掉的行。这没有用,所以我找到了一个解决方案 here,我希望它可以工作,即使用 /useenv 参数调用 DEVENV。
然后我找到了另一个解决方案here,即将<xs:include schemaLocation="MSBuild\MSBuild.Community.Tasks.xsd"/> 添加到Microsoft.Build.xsd。也没用。
所以,现在我没有想法了。如何在不要求开发人员更新其 path 变量的情况下使用/useenv 解决方案或其他解决方案来使 MSBuild 社区任务 XSD 任务正常工作?我知道我可以将 xsd.exe 放入 Visual Studio 解决方案中,但这对我来说似乎是一种廉价的解决方法。
【问题讨论】:
标签: xml visual-studio msbuild xsd.exe msbuildcommunitytasks