在TeamCity构建中找不到"TransformXml"任务(错误MSB4036)

Arb*_*æde 26 msbuild teamcity sitecore sitecore6 tds

您好我已经使用TeamCity构建服务器.我的项目是Sitecore Web Application.我正在使用TDS(HedgehogDevelopment).我在TeamCity中使用MS build设置了构建设置,当在构建配置管理器中禁用TDS项目时,它看起来像是在工作.但后来它变得很糟糕我得到网络错误

C:\ Program Files(x86)\ MSBuild\HedgehogDevelopment\SitecoreProject\v9.0\HedgehogDevelopment.SitecoreProject.targets(310,5):错误MSB4036:找不到"TransformXml"任务.请检查以下内容:1.)项目文件中任务的名称与任务类的名称相同.2.)任务类是"public"并实现Microsoft.Build.Framework.ITask接口.3.)在项目文件或位于"C:\ Windows\Microsoft.NET\Framework64\v3.5"目录中的*.tasks文件中正确声明任务.Project NetKey.TDSMaster\MyProject.TDSMaster.scproj失败.项目网站\ MyProject.sln失败

错误描述中的帮助不适合我.我在构建机器上没有VS 2012.我已安装Microsoft Visual Studio 2012 Shell以支持我的Web项目.怎么解决?谢谢.

jes*_*ing 22

TransformXML作为ASP.NET Web发布工具的一部分.因此,它们通常在构建服务器上安装Visual Studio,并且不仅需要Shell版本的Visual Studio.安装Visual Studio Express Web Edition也可能会有所帮助.

您可以尝试安装Web-Deploy软件包以查看它是否足够,但通常我只是在构建代理上安装完整版本的Visual Studio.这在MSDN订阅许可下是合法的.

经过一些实验,我可以告诉您至少需要在构建服务器上安装Visual Studio Web Developer Tools才能以官方方式安装这些任务.我怀疑安装Visual Studio Express Web Edition就足够了.

在此输入图像描述

  • 默认情况下,此处添加了TransformXML任务:`C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v {VisualStudioVersion}\Web\Microsoft.Web.Publishing.targets`.正确安装Visual Studio(意味着Visual Studio Pro或更好)应该可以解决问题.或者,您可以尝试从安装了Visual Studio的计算机上复制/粘贴msbuild文件夹,如果任务不依赖于Visual Studio附带的任何其他库,则可能会有效. (13认同)
  • 确认将整个C:\ Program Files(x86)\ MSBuild文件夹复制到TeamCity构建服务器将允许运行TransformXML任务.我试图只复制与TransformXML任务相关的文件,但仍然收到错误(直到我复制了整个MSBuild文件夹) (2认同)

小智 19

试试这个:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
Run Code Online (Sandbox Code Playgroud)


Ric*_*los 14

简答 - 明确导入

我必须做的事情:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />
Run Code Online (Sandbox Code Playgroud)

答案很长

在VS2013中执行文件 - >新建Web项目时,*.csproj文件中会出现以下内容:

<PropertyGroup>
  <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
  <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
Run Code Online (Sandbox Code Playgroud)

$(VisualStudioVersion)评估总是要11.0为我的生成计算机和多个开发机.即使在配备VS2013的机器上也是如此12.0.

潜入我发现,在Microsoft.WebApplication.targets上面,它有一行来导入我们真正想要的文件,Microsoft.Web.Publishing.targets只有它存在如第377行所示:

<!--Import publishing target-->
<Import Project="..\Web\Microsoft.Web.Publishing.targets" Condition="Exists('..\Web\Microsoft.Web.Publishing.targets')" />
Run Code Online (Sandbox Code Playgroud)

所以对我来说这是一个隐含的导入Microsoft.Web.Publishing.targets.

问题是,如果此文件不存在,它将不执行任何操作,直到您在尝试使用该TransformXml任务时出现错误时才会知道它.

安装VS2013没有安装Microsoft.Web.Publishing.targets11.0目录中.它确实将它安装在12.0目录中.我猜,如果我安装了VS2012,它做到这一点.

在任何情况下,我都可以通过显式Microsoft.Web.Publishing.targets12.0目录导入来解决它,如果它不存在,并且没有像这样隐式导入Microsoft.WebApplication.targets:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />
Run Code Online (Sandbox Code Playgroud)


Kim*_*Won 6

你有很多 Visual Studio 版本,然后试试这个

VS2015

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
Run Code Online (Sandbox Code Playgroud)

VS 2017

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v15.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
Run Code Online (Sandbox Code Playgroud)

VS 2019

<UsingTask TaskName="TransformXml"
    Condition=" Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.Tasks.dll') "
    AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

<Target Name="TransformConfig">
    <MakeDir Directories="$(TargetDir)" Condition="  Exists('$(TargetPath)') == False " />
    <TransformXml Source="app.config"
        Transform="app.$(Configuration).config"
        Destination="$(TargetPath).config" />
</Target>
Run Code Online (Sandbox Code Playgroud)