我在ASP.NET Web应用程序中使用了多个XSLT。
每当我构建项目时,我都希望将这些文件编译为dll。
目前,我正在通过从vs2010工具命令提示符处调用xsltc.exe来手动编译xslts。

如何为xsltc.exe添加msbuild任务,以便在构建项目时生成程序集?

我正在使用.NET 4.0。

最佳答案

那行得通,但实际上并没有以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进行程序集引用。

07-26 07:54