您好我使用TeamCity构建服务器。 我的项目是Sitecore Web Application。我正在使用TDS(HedgehogDevelopment)。我在TeamCity中使用MS build设置了构建设置,当在构建配置管理器中禁用TDS项目时,它看起来像是在工作。 但后来它让我感到网络错误
C:\ Program Files (86)\的MSBuild \ HedgehogDevelopment \ SitecoreProject \ 9.0 \ HedgehogDevelopment.SitecoreProject.targets(310, 5):错误MSB4036:找不到“TransformXml”任务。检查 以下内容:1。)项目文件中的任务名称与 任务类的名称。 2.)任务类是“公共的”和 实现Microsoft.Build.Framework.ITask接口。 3.)任务 在项目文件中或在。中正确声明 * .tasks文件位于“C:\ Windows \ Microsoft.NET \ Framework64 \ v3.5”目录中。项目 NetKey.TDSMaster \ MyProject.TDSMaster.scproj失败。项目 网站\ MyProject.sln失败
错误描述中的帮助不适合我。 我在构建机器上没有VS 2012。我已经安装了Microsoft Visual Studio 2012 Shell 支持我的web项目。 怎么解决? 谢谢。
答案 0 :(得分:21)
TransformXML
是ASP.NET Web发布工具的一部分。因此,它们通常在构建服务器上安装Visual Studio,并且不仅需要Shell版本的Visual Studio。安装Visual Studio Express Web Edition也可能起到作用。
您可以尝试安装Web-Deploy
package以查看它是否足够,但通常我只是在构建代理上安装Visual Studio的完整版本。根据MSDN订阅许可,这是合法的。
经过一些实验,我可以告诉您至少需要在构建服务器上安装Visual Studio Web Developer Tools才能以官方方式安装这些任务。我怀疑安装Visual Studio Express网络版就足够了。
答案 1 :(得分:18)
试试这个:
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
答案 2 :(得分:13)
我必须做的事情:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />
当您执行文件 - &gt;在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)' != ''" />
在构建计算机和多台开发计算机上,$(VisualStudioVersion)
始终为11.0
评估为12.0
。即使在使用VS2013的机器上,也就是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
的隐式导入。
问题是,如果此文件不存在,则在尝试使用Microsoft.Web.Publishing.targets
任务时遇到错误之前,它不会执行任何操作并且您不知道它。
安装VS2013未在11.0
目录中安装12.0
。它确实将它安装在Microsoft.Web.Publishing.targets
目录中。我猜我是否安装了VS2012,它会这样做。
无论如何,我能够通过显式从12.0
目录导入Microsoft.WebApplication.targets
来解决它,如果它不存在且不是隐式导入<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.targets" Condition="!Exists('$(VSToolsPath)\Web\Microsoft.Web.Publishing.targets')" />
,如下所示:
{{1}}
答案 3 :(得分:1)
默认情况下,在Visual Studio 2017中,未安装大多数(或所有?)组件,但您可以按https://docs.microsoft.com/en-us/visualstudio/install/modify-visual-studio中所述添加所需内容(即Asp.Net和Web开发)。
在我的机器上,安装程序位于&#34; C:\ Program Files(x86)\ Microsoft Visual Studio \ Installer \ vs_installer.exe&#34;
答案 4 :(得分:1)
提供的解决方案似乎适用于将 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
出于某种原因,使用 CLI 与 VS2019 时,Windows 上的 MSBuildSDKsPath
和 MSBuildExtensionsPath32
不同
命令行界面:
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
部分会在发布时发生变化
答案 5 :(得分: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>
答案 6 :(得分:0)
您有很多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>
答案 7 :(得分: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