C# XSLTC.EXE MSBuild任务

C# XSLTC.EXE MSBuild任务,c#,.net-4.0,msbuild,xsltc,C#,.net 4.0,Msbuild,Xsltc,我的ASP.NET web应用程序中使用了几个XSLT。 我希望每当我构建项目时,这些文件都被编译成dll。 目前,我正在通过从vs2010工具命令提示符调用xsltc.exe手动编译XSLT 如何为xsltc.exe添加msbuild任务,以便在生成项目时生成程序集 我正在使用.NET 4.0。 <PropertyGroup> <WinSDK>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin<

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

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

我正在使用.NET 4.0。


<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>
C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\Bin
,它可以工作,但不能以MSBuild友好的方式包装该工具。 我想出了这个(它足够好,可以应付)


变换类
$(OutDir)xslts.dll
“$(TargetFrameworkDKToolsDirectory)xsltc.exe”
这些目标将允许您将多个转换编译成一个DLL。 在“beforesolvereferences”之前运行XSLTC是必要的,这样您就可以对生成的DLL进行程序集引用

<!-- 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>