Tugas TransformXml tidak dapat dimuat dari Microsoft.Web.Publishing.Tasks.dll

95

Adakah yang melihat kesalahan ini dan tahu cara memperbaikinya?

Tugas "TransformXml" tidak dapat dimuat dari rakitan C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll.

Tidak dapat memuat file atau file assembly: /// C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll 'atau salah satu dependensinya. Sistem tidak dapat menemukan berkas yang dicari.

Konfirmasikan bahwa pernyataan tersebut benar, bahwa rakitan dan semua dependensinya tersedia, dan bahwa tugas tersebut berisi kelas publik yang mengimplementasikan Microsoft.Build.Framework.ITask.

Saya membaca di tempat lain bahwa masalahnya adalah ketika Anda tidak menginstal SQL Server. Tetapi saya memiliki SQL Express 2012 x64 yang diinstal dengan SP1. Saya juga menjalankan VS 2013 Professional.

Saya telah menjalankan solusi yang sama persis di VS 2012 express tanpa masalah.

allencoded
sumber
1
Ini harus menjadi paket nuget. Saya tidak suka referensi tersembunyi ini di dalam proyek saya.
Jaider
Anda harus menandai jawaban dari Benjamin Scheibe sebagai jawaban yang benar. Tampaknya menjadi solusi terbaik
BHuelse

Jawaban:

163

Jawaban yang diberikan oleh Dai Bok dan emalamisura berfungsi dengan baik selama Anda menggunakan Visual Studio 2012. Untuk VS 2013 ini juga gagal. Untuk membuat ini berfungsi dengan semua versi Visual Studio Anda harus:

  • Buka file proyek (.csproj) dari proyek yang gagal dimuat
  • Pencarian untuk <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
  • Ubah ke <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
  • Muat ulang proyek

Itu akan mengatur versi Visual Studio yang benar secara dinamis dan benar.

Ben Sch
sumber
2
Saya suka solusi Anda, Benjamin, tetapi masalah yang saya alami adalah folder v11 hilang, mungkin karena kami memiliki beberapa orang yang menggunakan vs2010 dan belum meningkatkan ke vs2012
Dai Bok
7
Ini membuat saya memulai di jalur yang benar, tetapi perubahan yang saya buat adalah ke simpul <UsingTask TaskName = "TransformXml" ...>. AssemblyFile saya menggunakan versi yang salah. Hanya perlu mengubah versinya di sini. Opsi lainnya adalah menggunakan makro versi alih-alih menyetel versi secara eksplisit.
Scott
5
$(VisualStudioVersion)mengembalikan versi sebelumnya :(
Jaider
1
Ini bisa menjadi parameter: stackoverflow.com/questions/20002532/…
Jaider
2
Bekerja dengan sempurna saat meningkatkan dari VS2015 ke VS2017. Sekarang saya dapat membuka solusi di kedua IDE.
Yury Schkatula
29

Agar milik saya berfungsi, saya hanya menyalin v10.0folder saya dan menamainya kembali v11.0, dan semuanya tampaknya berfungsi dengan baik sejak saat itu. Itulah perbaikan cepat untuk saat ini.

Karena ini mungkin bukan solusi terbaik, dan meskipun berhasil, saya akan mencoba menginstal Microsoft Windows SDK untuk Windows 7 dan .NET Framework 4 Windows SDK untuk Windows 7 dan .NET Framework 4, tetapi butuh waktu lama untuk unduh.

Dai Bok
sumber
1
Saya tidak melihat folder 'Web' di v10.0. Jadi saya menyalinnya dari folder v12.0 ke folder v11.0.
Sundeep
9

Saya telah memerangi masalah ini di server build kami selama beberapa hari, jadi saya pikir saya akan mendokumentasikan resolusi yang saya dapatkan. Pertama, server build saya memasang ekstensi penerbitan web . Saya dapat menggunakan tugas TransformXml sesuka hati saya di dalam proyek aplikasi web.

Untuk menggunakannya di luar proyek aplikasi web, saya mencoba menambahkan elemen UsingTask ke proyek saya dan mengarahkannya ke tempat yang tepat menggunakan properti ms build (seperti yang ditunjukkan Benjamin). Namun, mereka tidak ada di server build saya (mereka yang memiliki akses mudah ke sistem file server build mereka mungkin dapat melewati ini dan menginstal paket yang relevan ke Visual Studio). Saya bahkan melangkah lebih jauh ke versi hard code visual studio, tetapi selalu menjatuhkan kesalahan itu pada saya.

Saya akhirnya menyerah, menarik DLL dari PC lokal saya:

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

Saya mengunggahnya ke kontrol sumber dan menambahkan folder itu ke ruang kerja build saya (Edit Definisi Build -> Pengaturan Sumber -> Folder Kontrol Sumber). Dari sana, saya bahkan tidak perlu mereferensikan folder - inilah tampilan UsingTask saya:

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

Sekarang saya dapat menggunakan tugas TransformXml sesuka hati saya dari proyek apa pun.

bvoyelr.dll
sumber
9
The MSBuild.Microsoft.VisualStudio.Web.targets paket memiliki target yang diperlukan untuk membangun tanpa VS diinstal. Sebagai Contoh: <UsingTask TaskName = "TransformXml" AssemblyFile = "packages \ MSBuild.Microsoft.VisualStudio.Web.t Target.11.0.2.1 \ tools \ VSToolsPath \ Web \ Microsoft.Web.Publishing.Tasks.dll" />. Lihat blog ini untuk lebih jelasnya
moonpatrol
1
Hai @moonpatrol, Anda harus membuatnya sebagai jawaban, karena saya lebih suka cara ini - menginstal paket dan kemudian merujuknya - solusi yang benar-benar universal :-) Saya baru saja mencobanya, dan berfungsi dengan sempurna. Terima kasih! jika Anda membuat jawaban, cukup ping saya dan saya akan memilih.
Tengiz
9

Untuk mengatasi masalah tersebut,

  1. Temukan Penginstal Visual studio di komputer Anda
  2. Klik atau ketuk untuk memulai penginstal, lalu pilih Ubah.
  3. Dari layar Komponen Individual, pilih Asp.net dan alat pengembangan web, lalu pilih Ubah / Pasang.

Ini memecahkan masalah karena membuat dll di jalur yang disebutkan.

Vinodhini Ramasamy
sumber
2
Saya menggunakan VS2017 dan melakukan langkah ini tidak membuat file tersebut. Saya pikir mungkin ada hal lain yang Anda pilih (atau kombinasi dengan ASP.net dan alat pengembangan web) yang menambahkannya. Tidak yakin bagaimana :(
Kris
Saya hanya memilih itu. Coba pilih komponen terkait Web dan instal. Semoga beruntung.
Vinodhini Ramasamy
Saya baru saja mencoba seluruh alur kerja web dan masih belum memiliki file tersebut. Saya merasa solusi ini sudah sangat dekat. Berharap itu bisa menjadi pin karena saya memiliki ruang terbatas pada HDD saya untuk memasang komponen
Robert Snyder
4
Untuk VS2017, saya lakukan Tools → Get Tools and Features... → Individual Components: Windows 10 SDK (10.0.14393.0) and ASP.NET and web development tools . Ini sepertinya berhasil.
John Jones
6

Untuk VS2019

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

Saya ganti MSBuildToolsVersiondengan VisualStudioVersion.

vik_78
sumber
Dengan dokumen ini " docs.microsoft.com/visualstudio/msbuild/… " ubah MSBuildToolsVersion dengan VisualStudioVersion lalu saya ubah properti itu bekerja dengan baik seperti ini " $ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v $ (VisualStudioVersion) "
Kim Ki Won
5

Karena hanya ada v12.0, v14.0 dan v15.0 di folder VisualStudio saya, saya mengedit file proyek saya dan mengubah jalur referensi dari v10.0 ke v14.0. Kemudian proyek berhasil dibangun.

Sebelum:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />

Setelah:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
Pedang
sumber
2

Jawaban yang benar untuk ini adalah dengan membongkar proyek yang dimaksud dan kemudian mengedit file csproj, mencari entri yang mereferensikan jalur 10.0 dan mengubahnya menjadi menunjuk ke 11.0.

emalamisura
sumber
+1 untuk itu. Saya menyebabkan masalah ini ketika saya menyalin folder ruang kerja saya dari satu mesin dev ke mesin dev lainnya. Mesin dev kedua menginstal v11, bukan v10. Jadi, folder v10 kosong.
maplemale
1

Anda membutuhkan dua hal untuk membuatnya berhasil:

1) Instal Visual Studio Build Tools (Anda tidak memerlukan Visual Studio secara keseluruhan, hanya VS Build Tools) dengan opsi "Web development build tools" yang dipilih di server build Anda https://www.visualstudio.com/pl/thank -you-download-visual-studio /? sku = BuildTools & rel = 15

2) Pastikan jalur ke Microsoft.Web.Publishing.Tasks.dll sudah benar

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

Bagi saya itu mulai bekerja hanya dengan menambahkan referensi ke paket NuGet MSBuild.Microsoft.VisualStudio.Web.t target v14.0.0.3

Bahkan tidak perlu menambahkan elemen UsingTask ke file proyek seperti yang disebutkan oleh pembuat paket

https://github.com/pdonald/nuget-webt Target

Instal saja paket NuGet. Paket secara otomatis menyetel properti $ (VSToolsPath) untuk menggunakan file target di folder alat.

Dan kemudian saya dapat menggunakan TransformXml dan tugas lainnya, yang ditentukan dalam paket, misalnya untuk mengubah 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>
Tagihan
sumber
0

Seandainya seseorang menggunakan csproj gaya SDK, Anda dapat mencapai ini tanpa harus menginstal Visual Studio di server build.

  1. Pertama, Anda harus menginstal paket nuget SlowCheetah ke proyek Anda. Setelah Anda menginstalnya, Anda akan melihat yang berikut ini dalam proyek bergaya SDK Anda.

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  2. Kemudian pastikan Anda menambahkan atribut GeneratePathProperty = "true" (lihat di bawah). Ini sangat penting untuk bagian selanjutnya karena ini akan membantu Anda mengambil jalur di mana paket nuget dipulihkan pada mesin Anda. George Dangl menjelaskannya dalam artikelnya di sini .

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20" GeneratePathProperty="true">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  3. Impor target SlowCheetah ke dalam proyek Anda:

    <Import Project="$(PkgMicrosoft_VisualStudio_SlowCheetah)\build\Microsoft.VisualStudio.SlowCheetah.targets" />
    
  4. Anda sekarang dapat menggunakan perintah target (dalam hal ini setelah dipublikasikan) untuk menerapkan beberapa transformasi kustom. Jika perlu, Anda selalu dapat melakukan hard-code untuk nama file di bawah daripada menggunakan variabel pada contoh di bawah.

    <Target Name="AfterPublishs" AfterTargets="Publish">
         <TransformTask Source="Web.config" Transform="Web.$(Configuration).MyCustomTransformFile.config" Destination="$(PublishDir)\Web.config" />
    </Target>
    

Jika Anda belum pernah menggunakan SlowCheetah sebelumnya, saya sarankan untuk memeriksanya. Mereka memiliki ekstensi Visual Studio yang akan memudahkan Anda untuk melihat file transformasi.

Eric Chhun
sumber