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

Visual studio 无法从Microsoft.Web.Publishing.Tasks.dll加载TransformXml任务,visual-studio,Visual Studio,有人看到这个错误并知道如何修复它吗 无法从程序集C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll加载“TransformXml”任务 无法加载文件或程序集的file:///C:\程序文件(x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll'或其

有人看到这个错误并知道如何修复它吗

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

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

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

我在别处读到,问题在于没有安装SQL Server。但我确实在SP1中安装了SQL Express 2012 x64。我也在运行VS2013专业版


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

为了让我的解决方案正常工作,我复制了我的
v10.0
文件夹,并将其重命名为
v11.0
,从那时起,一切都很顺利。这是目前的快速解决方案


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

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

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

  • 打开无法加载的项目的项目文件(.csproj)
  • 搜索
  • 将其更改为
  • 重新加载项目

这将动态、正确地设置Visual Studio的正确版本。

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

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

我最终放弃了,从我的本地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任务从任何项目中获取我内心的内容

因为我的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" />

要解决此问题

  • 在计算机中找到Visual studio安装程序
  • 单击或点击以启动安装程序,然后选择“修改”
  • 从单个组件屏幕中,选择Asp.net和web开发工具,然后选择修改/安装

  • 这就解决了这个问题,因为它在所提到的路径中创建了dll。

    您需要两件事才能使其正常工作:

    1) 在构建服务器上使用选定的“Web开发构建工具”选项安装Visual Studio构建工具(您不需要整个Visual Studio,只需要VS构建工具)

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

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

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

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

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

    只需安装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>
    
    
    $(TargetFileName).config
    
    如果有人正在使用SDK风格的csproj,您无需在构建服务器上安装Visual Studio即可实现这一点

  • 首先,您应该将安装到项目中。安装后,您将在SDK样式的项目中看到以下内容

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
    
    全部的
    运行时间;建设;本地人;内容文件;分析仪
    
  • 然后确保添加GeneratePathProperty=“true”属性(见下文)。这对于下一部分非常重要,因为它将帮助您获取在您的机器上还原nuget包的路径。乔治·丹格尔在他的书中解释了这一点

    
    全部的
    运行时间;建设;本地人;内容文件;分析仪
    
  • 将SlowCheetah目标导入到项目中:

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

    <Target Name="AfterPublishs" AfterTargets="Publish">
         <TransformTask Source="Web.config" Transform="Web.$(Configuration).MyCustomTransformFile.config" Destination="$(PublishDir)\Web.config" />
    </Target>
    
    
    
  • 如果你以前没用过,我建议你去看看。他们有一个VisualStudio扩展,这将使您更容易
    <Target Name="AfterPublishs" AfterTargets="Publish">
         <TransformTask Source="Web.config" Transform="Web.$(Configuration).MyCustomTransformFile.config" Destination="$(PublishDir)\Web.config" />
    </Target>