XSLTC.EXE MSBuild Task

本文关键字:Task MSBuild EXE XSLTC | 更新日期: 2023-09-27 18:11:02

在我的ASP中使用了几个xslt。. NET web应用程序。我希望这些文件被编译为dll每当我构建项目。目前,我正在通过从vs2010 tools命令提示符调用xsltc.exe手动编译xslts。

我如何为xsltc.exe添加msbuild任务,以便每当我构建我的项目时它都会生成程序集?

我用的是。net 4.0

XSLTC.EXE MSBuild Task

这可以工作,但并没有真正以MSBuild友好的方式包装工具。我想到了这个(这足够好了)。

<!-- The Transform File Names... -->
<ItemGroup>
  <XsltcTransform Include="Transform1.xslt">
    <!-- And the generated .Net Class name. -->
    <Class>Transform1Class</Class>
  </XsltcTransform>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)'Microsoft.CSharp.targets" />
<!-- Sadly using $(OutDir) MUST come after the Import of CSharp.targets -->
<PropertyGroup>
  <XSLTCOutputDll>$(OutDir)xslts.dll</XSLTCOutputDll>
</PropertyGroup>
<Target Name="FindXSLTC">
  <PropertyGroup>
    <XSLTC>"$(TargetFrameworkSDKToolsDirectory)xsltc.exe"</XSLTC>
  </PropertyGroup>
</Target>
<Target Name="XSLTC" Inputs="@(XsltcTransform)" Outputs="$(XSLTCOutputDll)"   DependsOnTargets="FindXSLTC">
  <Exec Command="$(XSLTC) /out:&quot;$(XSLTCOutputDll)&quot; @(XsltcTransform -> ' /class:%(Class) %(FullPath) ')" />
</Target>
<Target Name="BeforeResolveReferences" DependsOnTargets="XSLTC">
</Target>

这些目标将允许您将多个转换编译到一个DLL中。在"BeforeResolveRefereneces"之前运行XSLTC是必要的,这样您就可以对生成的DLL有一个程序集引用。

<PropertyGroup>
     <WinSDK>C:'Program Files (x86)'Microsoft SDKs'Windows'v7.0A'Bin</WinSDK>
</PropertyGroup>    
<Target Name="Build">
    <Exec Command="%22$(WinSDK)'xsltc.exe%22 /out:$(OutputPath)'_PublishedWebsites'xyzapp'bin'Xslts.dll /class:ABC %22$(MSBuildProjectDirectory)'xyzapp'a.xslt%22 /class:DEF %22$(MSBuildProjectDirectory)'xyzapp'b.xslt%22 /class:GHI %22$(MSBuildProjectDirectory)'xyzapp'c.xslt%22"/>
</Target>