Не вдалося завантажити завдання TransformXml із Microsoft.Web.Publishing.Tasks.dll


95

Хтось бачив цю помилку і знає, як її виправити?

Не вдалося завантажити завдання "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. Я також працюю над VS 2013 Professional.

Це саме те саме рішення я запустив у VS 2012 express без проблем.


1
Це повинен бути nuget-пакет. Мені не подобаються ці приховані посилання всередині мого проекту.
Jaider

Ви повинні позначити відповідь Бенджаміна Шейбе як правильну. Здається, це найкраще рішення
BHuelse

Відповіді:


163

Відповіді, надані 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 динамічно та належним чином.


2
Мені подобається ваше рішення Бенджамін, але проблема, з якою я стикалася, полягала в тому, що папка v11 відсутня, можливо, тому що у нас є деякі люди, які використовують vs2010 і ще не перейшли на vs2012
Dai Bok,

7
Це змусило мене розпочати правильний шлях, але я вніс зміни до вузла <UsingTask TaskName = "TransformXml" ...>. My AssemblyFile використовував неправильну версію. Просто потрібно було змінити версію тут. Іншим варіантом буде використання макросу версії замість явного встановлення версії.
Скотт

5
$(VisualStudioVersion)повертає попередню версію :(
Jaider

1
Це може бути параметр: stackoverflow.com/questions/20002532 / ...
Jaider

2
Ідеально працює під час оновлення з VS2015 на VS2017. Тепер я можу відкрити рішення в обох IDE.
Yury Schkatula

29

Щоб змусити мою працювати, я просто скопіював свою v10.0папку і перейменував її на v11.0, і, здається, з того часу все працює добре. Наразі це швидке виправлення.

Оскільки це, мабуть, не найкраще рішення, і хоча воно працює, я збирався спробувати встановити Microsoft Windows SDK для Windows 7 і .NET Framework 4 Windows SDK для Windows 7 і .NET Framework 4, але потрібно довго завантажити.


1
Я не бачив папку "Веб" у версії 10.0. Тому я скопіював його з папки v12.0 у папку v11.0.
Неділя

9

Я боровся з цією проблемою на нашому сервері збірки протягом декількох днів, тому вирішив задокументувати вирішення, до якого прийшов. По-перше, на моєму сервері збірки встановлено розширення веб-публікації . Я можу використовувати завдання 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

Я завантажив їх у джерело керування та додав цю папку до робочої області моєї збірки (Редагувати визначення збірки -> Параметри джерела -> Папка керування джерелом). Звідти мені навіть не потрібно посилатися на папку - ось як виглядає моя UseTask:

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

Тепер я можу використовувати завдання TransformXml до душі з будь-якого проекту.


9
Пакет MSBuild.Microsoft.VisualStudio.Web.targets має необхідні цілі для побудови без встановленої VS. Наприклад: <UsingTask TaskName = "TransformXml" AssemblyFile = "пакети \ MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1 \ tools \ VSToolsPath \ Web \ Microsoft.Web.Publishing.Tasks.dll" />. Докладніше дивіться в цьому блозі
moonpatrol

1
Привіт @moonpatrol, ти повинен дати йому відповідь, тому що я віддаю перевагу саме цьому - встановлення пакета, а потім посилання на нього - абсолютно універсальне рішення :-) Я щойно спробував, і працює чудово. В будь-якому випадку, дякую Вам! якщо ви дасте відповідь, просто напишіть мені, і я проголосую.
Тенгіз

9

Щоб вирішити проблему,

  1. Знайдіть інсталятор Visual studio на своєму комп’ютері
  2. Клацніть або торкніться, щоб запустити інсталятор, а потім виберіть Змінити.
  3. На екрані Індивідуальні компоненти виберіть Asp.net та інструменти веб-розробки, а потім виберіть Змінити / Встановити.

Це вирішило проблему, оскільки створює DLL-файли у згаданому шляху.


2
Я використовую VS2017 і, виконуючи цей крок, ці файли не створюються. Я думаю, можливо, щось інше, що ви вибрали (або в поєднанні з ASP.net та інструментами веб-розробки), що додало його. Не знаю, що саме :(
Кріс

Я вибрав лише це. Спробуйте вибрати веб-компоненти та встановити. Удачі, правда.
Vinodhini Ramasamy

Я щойно спробував весь веб-процес роботи, і цих файлів досі немає. Я відчуваю, що це рішення так близько. Хотілося б, щоб це можна було закріпити, оскільки на жорсткому диску у мене обмежений простір для встановлення компонентів
Роберт Снайдер,

4
Що стосується VS2017, я це зробив Tools → Get Tools and Features... → Individual Components: Windows 10 SDK (10.0.14393.0) and ASP.NET and web development tools . Здається, це зробило фокус.
Джон Джонс,

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" />

5

Для VS2019

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

Я замінив MSBuildToolsVersionна VisualStudioVersion.


За цим документом " docs.microsoft.com/visualstudio/msbuild/… " змініть MSBuildToolsVersion на VisualStudioVersion, тоді я змінив цю властивість, яка працює приблизно так " $ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v $ (VisualStudioVersion) "
Кім Кі Вон,

2

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


+ 1 за це. Я спричинив цю проблему, коли скопіював папки робочого простору з однієї машини розробника на іншу. На другій машині розробника встановлено v11, а не v10. Таким чином, папка v10 була порожньою.
maplemale

1

Щоб це працювало, потрібні дві речі:

1) Встановіть Visual Studio Tools Build (Вам не потрібні цілі Visual Studio, лише VS Build Tools) із вибраним параметром «Інструменти побудови веб-розробки» на вашому сервері збірки 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) для використання цільового файлу в папці інструментів.

А потім я зміг використовувати 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

Про всяк випадок, якщо хтось використовує 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, яке полегшить вам попередній перегляд файлів перетворення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.