Не удалось загрузить задачу 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, но это займет много времени, чтобы скачать.
Чтобы исправить проблему,
- Найдите установщик Visual Studio на вашем компьютере
- Нажмите или коснитесь, чтобы запустить программу установки, а затем выберите "Изменить".
- На экране "Отдельные компоненты" выберите 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 на сервере сборки.
Сначала вы должны установить пакет nuget SlowCheetah в свой проект. После его установки вы увидите следующее в своем проекте в стиле SDK.
<PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
Затем убедитесь, что вы добавили атрибут 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>
Импортируйте цели 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>
Если вы раньше не использовали SlowCheetah, рекомендую попробовать. У них есть расширение Visual Studio, которое упростит предварительный просмотр файлов преобразования.