Не удалось загрузить задачу TransformXml из Microsoft.Web.Publishing.Tasks.dll

Кто-нибудь видел эту ошибку и знает, как ее исправить?

Не удалось загрузить задачу "TransformXml" из сборки C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll.

Не удалось загрузить файл или сборку 'file:///C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.Tasks.dll' или одну из ее зависимостей. Система не может найти указанный файл.

Убедитесь, что объявление правильное, что сборка и все ее зависимости доступны, и что задача содержит открытый класс, который реализует Microsoft.Build.Framework.ITask.

В другом месте я читал, что проблема в том, что у вас не установлен SQL Server. Но у меня SQL Express 2012 x64 установлен с пакетом обновления 1 (SP1). Я также использую VS 2013 Professional.

Я использовал это же решение в VS 2012 Express без проблем.

11 ответов

Решение

Ответы, предоставленные Dai Bok и emalamisura, работают нормально, если вы используете Visual Studio 2012. Для 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 динамически и правильно.

Чтобы заставить мою работать, я просто скопировал свой v10.0 папку и переименовал ее в v11.0и с этого момента все работает хорошо. Это быстрое решение на данный момент.

Поскольку это, вероятно, не лучшее решение, и хотя оно работает, я собирался попробовать установить Microsoft Windows SDK для Windows 7 и.NET Framework 4 Windows SDK для Windows 7 и.NET Framework 4, но это займет много времени, чтобы скачать.

Чтобы исправить проблему,

  1. Найдите установщик Visual Studio на вашем компьютере
  2. Нажмите или коснитесь, чтобы запустить программу установки, а затем выберите "Изменить".
  3. На экране "Отдельные компоненты" выберите Asp.net и инструменты веб-разработки, а затем выберите "Изменить / установить".

Это решило проблему, так как создает DLL в указанном пути.

Я боролся с этой проблемой на нашем сервере сборки в течение нескольких дней, поэтому я решил, что задокументирую решение, к которому я пришел. Во-первых, на моем сервере сборки установлены расширения для веб-публикаций. Я могу использовать задачу TransformXml для своего сердца внутри проекта веб-приложения.

Чтобы использовать его за пределами проекта веб-приложения, я попытался добавить элемент UsingTask в свой проект и указать его в нужном месте, используя свойства сборки ms (как продемонстрировал Бенджамин). Однако их не было на моем сервере сборки (те, кто имеет легкий доступ к файловой системе своего сервера сборки, возможно, могут пропустить это и просто установить соответствующий пакет в Visual Studio). Я даже дошел до того, что создавал жесткие программные версии Visual Studio, но это всегда сбрасывало на меня эту ошибку.

Я наконец сдался, вытащил библиотеки 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 для моего сердца из любого проекта.

Для VS2019

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

Я заменил MSBuildToolsVersion с VisualStudioVersion,

Поскольку в моей папке 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" />

Представленные решения, похоже, подходят для использования VS в качестве IDE, но если вы используете DotnetCore через CLI или в системе на основе unix, это не сработает.

Я обнаружил, что, похоже, работает следующее

        <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

По какой-то причине MSBuildSDKsPath и MSBuildExtensionsPath32 разные в окнах при использовании CLI против VS2019

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 часть названия, которая меняется при выпуске

Также создан https://github.com/dotnet/sdk/issues/16469 и отвечает на это в. Задача «TransformXml» не найдена (ошибка MSB4036) в сборке TeamCity

Правильный ответ на этот вопрос - выгрузить рассматриваемый проект, а затем отредактировать файл csproj, найти запись, в которой они ссылаются на путь 10.0, и вместо этого изменить его на 11.0.

Для меня это начало работать, просто добавив ссылку на пакет NuGet MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3

Даже нет необходимости добавлять элемент UsingTask в файл проекта, как это было сказано автором пакета.

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

Просто установите пакет NuGet. Пакет автоматически устанавливает свойство $(VSToolsPath) для использования целевого файла в папке инструментов.

Затем я смог использовать 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>

Вам нужно две вещи, чтобы это работало:

1) Установите инструменты сборки Visual Studio (вам не нужна вся Visual Studio, только инструменты сборки VS) с выбранным параметром "Инструменты сборки веб-разработки" на сервере сборки https://www.visualstudio.com/pl/thank -вы-скачивание-зрительно-студия /? = ы & отн инструмент сборки = 15

2) Убедитесь, что путь к Microsoft.Web.Publishing.Tasks.dll правильный.

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

На всякий случай, если кто-то использует csproj в стиле SDK, вы можете добиться этого, не устанавливая Visual Studio на сервере сборки.

  1. Сначала вы должны установить пакет nuget SlowCheetah в свой проект. После его установки вы увидите следующее в своем проекте в стиле 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 на вашем компьютере. Джордж Дангл объясняет это в своей статье здесь.

    <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, которое упростит предварительный просмотр файлов преобразования.

Другие вопросы по тегам