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

时间:2013-12-03 18:22:32

标签: visual-studio

有没有人看过这个错误并知道如何修复它?

  

无法从程序集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中运行了这个完全相同的解决方案,没有任何问题。

11 个答案:

答案 0 :(得分:137)

只要您使用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版本。

答案 1 :(得分:29)

为了让我的工作,我只是复制了我的v10.0文件夹并将其重命名为v11.0,从那时起事情似乎运作良好。这是现在的快速解决方案。

由于这可能不是最好的解决方案,虽然它可行,但我打算尝试安装适用于Windows 7和.NET Framework 4的Microsoft Windows SDK for Windows 7 and .NET Framework 4 Windows SDK,但需要很长时间才能下载。

答案 2 :(得分:8)

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

要在Web应用程序项目的外部使用它,我尝试将UsingTask元素添加到我的项目中,并使用ms构建属性将其指向正确的位置(正如Benjamin演示的那样)。但是,它们不在我的构建服务器上(那些可以轻松访问构建服务器的文件系统的人可能会跳过这个,只需将相关的软件包安装到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

我将它们上传到源代码管理,并将该文件夹添加到我的构建工作区(编辑构建定义 - &gt;源设置 - &gt;源代码管理文件夹)。从那里开始,我甚至不需要引用该文件夹 - 这就是我的UsingTask的样子:

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

现在,我可以将TransformXml任务用于我心中的任何项目内容。

答案 3 :(得分: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" />

答案 4 :(得分:4)

要解决此问题,

  1. 在计算机中查找Visual Studio Installer
  2. 单击或点击以启动安装程序,然后选择修改。
  3. 从Individual Components屏幕中,选择Asp.net和Web开发工具,然后选择Modify / Install。
  4. 这解决了问题,因为它在上述路径中创建了dll。

答案 5 :(得分:2)

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

答案 6 :(得分:1)

对于VS2019

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

我将MSBuildToolsVersion替换为VisualStudioVersion

答案 7 :(得分: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>

答案 8 :(得分:0)

你需要两件事才能使它发挥作用:

1)使用选定的&#34; Web开发构建工具&#34;安装Visual Studio构建工具(您不需要整个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" />

答案 9 :(得分:0)

只要有人使用SDK风格的csproj,就可以实现此目的而不必在构建服务器上安装Visual Studio。

  1. 首先,您应该将SlowCheetah nuget package安装到项目中。安装后,您将在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)在他的article here中对此进行了解释。

    <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扩展,可让您更轻松地预览变换文件。

答案 10 :(得分:0)

提供的解决方案似乎适用于将 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 上的 MSBuildSDKsPathMSBuildExtensionsPath32 不同

命令行界面: 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 部分会在发布时发生变化

还创建了 https://github.com/dotnet/sdk/issues/16469 并在 The "TransformXml" task was not found (error MSB4036) on TeamCity build 上回答了这个问题