无法从Microsoft.Web.Publishing.Tasks.dll加载TransformXml任务


95

有没有人看到此错误并知道如何解决?

无法从程序集C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll中加载“ TransformXml”任务。

无法加载文件或程序集“ file:/// C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll”或其依赖项之一。该系统找不到指定的文件。

确认声明正确,程序集及其所有依赖项均可用,并且任务包含实现Microsoft.Build.Framework.ITask的公共类。

我在其他地方读过,问题出在您没有安装SQL Server时。但是我确实已经在SP1上安装了SQL Express 2012 x64。我也在运行VS 2013 Professional。

我在VS 2012 Express中运行了完全相同的解决方案,没有任何问题。


1
这应该是一个nuget包。我不喜欢这个隐藏在我项目内部的引用。
贾德2015年

您应该将本杰明·谢贝(Benjamin Scheibe)的答案标记为正确的答案。这似乎是最好的解决方案
BHuelse

Answers:


163

只要使用Visual Studio 2012,Dai Bok和emalamisura所提供的答案就可以正常工作。对于VS 2013,此方法同样会失败。为了使此功能适用于所有版本的Visual Studio,您应该:

  • 打开无法加载的项目的项目文件(.csproj)
  • 搜索 <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
  • 更改为 <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
  • 重新载入专案

这样可以动态,正确地设置正确的Visual Studio版本。


2
我喜欢您的解决方案本杰明,但是我遇到的问题是v11文件夹丢失了,这可能是因为我们有些人在使用vs2010并且尚未升级到vs2012
Dai Bok

7
这使我开始走上正确的道路,但所做的更改是对<UsingTask TaskName =“ TransformXml” ...>节点。我的AssemblyFile使用的版本错误。只需在此处更改版本。另一种选择是使用版本宏,而不是显式设置版本。
斯科特,

5
$(VisualStudioVersion)返回的是早期版本:(
Jaider

1
这可能是一个参数:stackoverflow.com/questions/20002532/...
Jaider

2
从VS2015升级到VS2017时完美工作。现在,我可以在两个IDE中打开该解决方案。
Yury Schkatula

29

为了使我的工作正常进行,我只是复制了我的v10.0文件夹并将其重命名为v11.0,从那时开始,一切似乎运转良好。这是目前的快速解决方案。

由于这可能不是最好的解决方案,尽管它可以工作,但我打算尝试安装适用于Windows 7和.NET Framework 4的Microsoft Windows SDK,但适用于Windows 7和.NET Framework 4的 Windows SDK却花了很长时间下载。


1
我在v10.0中没有看到“ Web”文件夹。所以我将其从v12.0文件夹复制到v11.0文件夹。
森迪普•

9

我在构建服务器上解决这个问题已经有好几天了,所以我想我要记录下我要解决的问题。首先,我的构建服务器安装了Web发布扩展。我可以在Web应用程序项目中使用TransformXml任务处理我内心的内容。

为了在Web应用程序项目之外使用它,我尝试将UsingTask元素添加到我的项目中,并使用ms build属性将其指向正确的位置(如Benjamin所示)。但是,它们不在我的构建服务器上(那些可以轻松访问其构建服务器的文件系统的人可能会跳过此步骤,而只需将相关的软件包安装到Visual Studio中即可)。我什至可以硬编码Visual Studio版本,但它总是使我犯了这个错误。

我最终放弃了,从本地PC上提取了DLL:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.XmlTransform.dll

我将它们上载到源代码管理,并将该文件夹添加到我的构建的工作区中(编辑构建定义->源代码设置->源代码控制文件夹)。从那里,我什至不需要引用该文件夹-这是我的UsingTask的样子:

  <UsingTask TaskName="TransformXml" AssemblyFile="Microsoft.Web.Publishing.Tasks.dll" />

现在,我可以使用TransformXml任务处理任何项目中的内容。


9
MSBuild.Microsoft.VisualStudio.Web.targets包必须建立一个没有安装VS必要的目标。例如:<UsingTask TaskName =“ TransformXml” AssemblyFile =“ packages \ MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1 \ tools \ VSToolsPath \ Web \ Microsoft.Web.Publishing.Tasks.dll” />。请参见博客为更多的细节
moonpatrol

1
嘿@moonpatrol,您应该给它一个答案,因为我更喜欢这种方式-安装软件包,然后引用它-绝对通用的解决方案:-)我刚刚尝试过,并且效果很好。还是很感谢你!如果您做出答复,请ping我,我将投票。
Tengiz

9

要解决此问题,

  1. 在您的计算机中找到Visual Studio安装程序
  2. 单击或点击以启动安装程序,然后选择“修改”。
  3. 在“单个组件”屏幕中,选择Asp.net和Web开发工具,然后选择“修改/安装”。

这解决了问题,因为它在上述路径中创建了dll。


2
我正在使用VS2017,执行此步骤不会创建那些文件。我认为您选择的其他内容(或与ASP.net和Web开发工具结合使用)可能添加了它。虽然不知道什么:(
Kris

我只选择了那个。尝试选择与Web相关的组件并安装。祝你好运。
Vinodhini Ramasamy

我只是尝试了整个Web工作流程,但仍然没有这些文件。我觉得这个解决方案是如此接近。希望可以指出这一点,因为我的硬盘上安装部件的空间有限
罗伯特·斯奈德

4
对于VS2017,我做到了Tools → Get Tools and Features... → Individual Components: Windows 10 SDK (10.0.14393.0) and ASP.NET and web development tools 。这似乎已经解决了问题。
约翰·琼斯

6

对于VS2019

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion

我换成MSBuildToolsVersionVisualStudioVersion


通过此文档“ docs.microsoft.com/visualstudio/msbuild/… ”,使用VisualStudioVersion更改MSBuildToolsVersion,然后更改该属性,使其正常运行,例如“ $(MSBuildExtensionsPath32)\ Microsoft \ VisualStudio \ v $(VisualStudioVersion)
Kim Ki Won

5

因为VisualStudio文件夹中只有v12.0,v14.0和v15.0,所以我编辑了项目文件,并将引用路径从v10.0更改为v14.0。然后,项目成功构建。

之前:

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

后:

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

2

正确的答案是卸载有问题的项目,然后编辑csproj文件,在其引用10.0路径的位置查找条目,然后将其更改为指向11.0。


+1。当我将工作空间文件夹从一台开发机复制到另一台开发机时,导致了这个问题。第二台开发机安装了v11,而不是v10。因此,v10文件夹为空。
maplemale 2014年

1

您需要执行以下两项操作:

1)安装Visual Studio生成工具(你并不会因为你的构建服务器上选择“Web开发构建工具”选项,需要整个Visual Studio中,只有VS生成工具) https://www.visualstudio.com/pl/thank -you-downloading-visual-studio /?sku = BuildTools&rel = 15

2)确保到Microsoft.Web.Publishing.Tasks.dll的路径正确

  <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />

1

对我来说,它只是通过添加对NuGet包MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3的引用而开始工作

甚至不需要像包作者提到的那样将UsingTask元素添加到项目文件中

https://github.com/pdonald/nuget-webtargets

只需安装NuGet软件包。程序包会自动将$(VSToolsPath)属性设置为使用tools文件夹中的目标文件。

然后,我能够使用TransformXml和包中定义的其他任务来转换app.config

  <Target Name="app_config_AfterCompile" AfterTargets="AfterCompile" Condition="Exists('app.$(Configuration).config')">
    <!--Generate transformed app config in the intermediate directory-->
    <TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
    <!--Force build process to use the transformed configuration file from now on.-->
    <ItemGroup>
      <AppConfigWithTargetPath Remove="App.config" />
      <AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
        <TargetPath>$(TargetFileName).config</TargetPath>
      </AppConfigWithTargetPath>
    </ItemGroup>
  </Target>

0

万一有人使用SDK风格的csproj,您可以实现此目的而不必在生成服务器上安装Visual Studio。

  1. 首先,您应该将SlowCheetah nuget软件包安装到您的项目中。安装后,您将在SDK风格的项目中看到以下内容。

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  2. 然后确保您添加了GeneratePathProperty =“ true”属性(请参见下文)。这对于下一部分非常重要,因为它将帮助您掌握nuget软件包在计算机上的还原路径。乔治·丹格尔(George Dangl)在这里文章中对此进行了解释。

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20" GeneratePathProperty="true">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  3. 将SlowCheetah目标导入到您的项目中:

    <Import Project="$(PkgMicrosoft_VisualStudio_SlowCheetah)\build\Microsoft.VisualStudio.SlowCheetah.targets" />
    
  4. 现在,您可以使用目标命令(在本例中为发布后)来应用一些自定义转换。如果需要,您始终可以对下面的文件名进行硬编码,而不必在下面的示例中使用变量。

    <Target Name="AfterPublishs" AfterTargets="Publish">
         <TransformTask Source="Web.config" Transform="Web.$(Configuration).MyCustomTransformFile.config" Destination="$(PublishDir)\Web.config" />
    </Target>
    

如果您以前没有使用过SlowCheetah,建议您将其检查一下。它们具有Visual Studio扩展,使您可以更轻松地预览转换文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.