35

您好,我已经使用 TeamCity 构建服务器。我的项目是 Sitecore Web 应用程序。我正在使用 TDS(HedgehogDevelopment)。我在 TeamCity 中使用 MS 构建设置了构建设置,当 TDS 项目在构建配置管理器中被禁用时,它看起来像工作。但后来它使我得到了净错误

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

错误描述中的帮助对我来说不是一个案例。我在构建机器上没有 VS 2012。我已经安装了 Microsoft Visual Studio 2012 Shell 来支持我的 Web 项目。如何解决?谢谢。

4

9 回答 9

25

TransformXML作为 ASP.NET Web 发布工具的一部分提供。因此,它们通常会在您的构建服务器上安装 Visual Studio,并且需要的不仅仅是 Visual Studio 的 Shell 版本。安装 Visual Studio Express Web Edition 也可以解决问题。

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

经过一些试验,我可以告诉您,您至少需要在构建服务器上安装 Visual Studio Web 开发人员工具,才能以官方方式安装这些任务。我怀疑安装 Visual Studio Express Web Edition 就足够了。

在此处输入图像描述

于 2013-05-20T10:34:24.090 回答
19

尝试这个:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
于 2014-03-13T16:42:50.777 回答
19

简短答案 - 显式导入

我必须做的:

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

长答案

当您在 VS2013 中执行 File -> New Web Project 时,您会在 *.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)' != ''" />

在构建机器和多台开发机器上$(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')" />

所以对我来说,这是对Microsoft.Web.Publishing.targets.

问题是如果这个文件不存在,它什么也不做,直到你在尝试使用TransformXml任务时遇到错误时你才知道它。

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

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

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />
于 2014-11-26T18:20:00.417 回答
7

你有很多 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"/>

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"/>

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>

于 2019-09-30T11:46:27.407 回答
2

提供的解决方案似乎适用于将 VS 用作 IDE,但如果您通过 CLI 或基于 unix 的系统使用 DotnetCore,则此方法不起作用。

我发现以下似乎有效

  <PropertyGroup>
    <XmlTransformDllPath Condition="'$(XmlTransformDllPath)' == '' AND '$(MSBuildRuntimeType)' == 'core'">$(MSBuildSDKsPath)/Microsoft.NET.Sdk.Publish/tools/net5.0/Microsoft.NET.Sdk.Publish.Tasks.dll</XmlTransformDllPath>
    <XmlTransformDllPath Condition="'$(XmlTransformDllPath)' == '' AND '$(MSBuildRuntimeType)' != 'core'">$(MSBuildSDKsPath)/Microsoft.NET.Sdk.Publish/tools/net472/Microsoft.NET.Sdk.Publish.Tasks.dll</XmlTransformDllPath>
    <XmlTransformDllPath Condition="!Exists($(XmlTransformDllPath))">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll</XmlTransformDllPath>
  </PropertyGroup>
  <UsingTask TaskName="TransformXml" AssemblyFile="$(XmlTransformDllPath)" />

该解决方案考虑了netcore,完整的.net

出于某种原因MSBuildSDKsPathMSBuildExtensionsPath32在使用 CLI 与 VS2019 时在 Windows 上有所不同

CLI:MSBuildSDKsPath = C:\Program Files\dotnet\sdk\5.0.103\Sdks MSBuildExtensionsPath32 =C:\Program Files\dotnet\sdk\5.0.103

Vs2019 MSBuildSDKsPath = C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Sdks MSBuildExtensionsPath32 =C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild

在我的 Mac 上返回/usr/local/share/dotnet/sdk/5.0.201

我看到的唯一问题是tools/net5.0名称的一部分会在发布时发生变化

于 2021-03-22T14:58:18.387 回答
1

默认情况下,在 Visual Studio 2017 中,大多数(或全部?)组件未安装,但您可以添加所需的内容(即 Asp.Net 和 Web 开发),如https://docs.microsoft.com/en-us/visualstudio中所述/安装/修改视觉工作室

在我的机器上,安装程序位于“C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe”

于 2017-03-13T06:35:11.467 回答
0

在 VS2015 中将 TypeScript 工具从 2.4.10 降级到 2.3.3 后,我遇到了同样的问题。

解决方案

我从 Microsoft.TypeScript.targets 文件中删除它

    <FormatLocalizedString Condition="'$(TypeScriptVersionCheckResult)' == 'NoneSpecified'"
  Culture="$(PreferredUILang)" 
  Name="TypeScriptNoVersionWarning" 
  Arguments="$(LastKnownTypeScriptVersion)">
  <Output TaskParameter="String" PropertyName="TypeScriptNoVersionWarning" />
</FormatLocalizedString>

<FormatLocalizedString Condition="'$(TypeScriptVersionCheckResult)' == 'Downgrade' OR '$(TypeScriptVersionCheckResult)' == 'Upgrade'"
  Culture="$(PreferredUILang)" 
  Name="TypeScriptVersionMismatchWarning" 
  Arguments="$(TypeScriptToolsVersion);$(LastKnownTypeScriptVersion)">
  <Output TaskParameter="String" PropertyName="TypeScriptVersionMismatchWarning" />
</FormatLocalizedString>
于 2017-07-12T08:56:15.703 回答
0

msbuild在尝试使用命令行构建我的项目时遇到了这个问题。该命令非常大,我没有注意到参数/p:VisualStudioVersion="14.0"是错误的,这导致Microsoft.Web.Publishing.targets. 由于我使用的是 Visual Studio 2019,它应该已被/p:VisualStudioVersion="16.0"删除或干脆删除。

对于遇到相同问题的任何人,请仔细检查您的 msbuild 参数,并检查是否有任何 .csproj 属性取决于您的 Visual Studio 版本。

我知道 C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\Web\Microsoft.Web.Publishing.targets 应该导入,但我的 .csproj 有

<Import Project="$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />

仍然没有找到 TransformXml。我尝试用 VsToolsPath 记录

<Project InitialTargets="CopyInitialConfig">
    ...
    <Target Name="MyTarget">
        <Message Importance="High" Text="VS Tools is at $(VSToolsPath)" />
    </Target>
    ...

构建记录的哪个

C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets
于 2020-09-21T10:51:46.100 回答
0

我的服务器中没有 Visual Studio。我只安装了 msbuild。为了解决我的问题,我发现我在“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web 中没有文件夹“Web。所以我从安装了 Visual Studio 的系统中复制了这个文件夹并粘贴到我的服务器上,它解决了我的问题。

于 2021-11-15T10:03:28.310 回答