Microsoft.Web.Publishing.Tasks.dll'den TransformXml görevi yüklenemedi


96

Bu hatayı gören ve nasıl düzeltileceğini bilen var mı?

"TransformXml" görevi C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll derlemesinden yüklenemedi.

Dosya veya derleme 'file: /// C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll' veya bağımlılıklarından biri yüklenemedi. Sistem belirtilen dosyayı bulamıyor.

Bildirimin doğru olduğunu, derlemenin ve tüm bağımlılıklarının kullanılabilir olduğunu ve görevin Microsoft.Build.Framework.ITask uygulayan bir genel sınıf içerdiğini onaylayın.

Başka bir yerde sorunun SQL Server kurulu olmadığında olduğunu okudum. Ancak SP1 ile yüklü SQL Express 2012 x64'üm var. Ayrıca VS 2013 Professional çalıştırıyorum.

VS 2012'de aynı çözümü sorunsuz bir şekilde çalıştırdım.


1
Bu bir nuget paketi olmalı. Projemin içindeki bu gizli referansları sevmiyorum.
Jaider

Benjamin Scheibe'nin cevabını doğru olarak işaretlemelisiniz. En iyi çözüm gibi görünüyor
BHuelse

Yanıtlar:


165

Dai Bok ve emalamisura tarafından sağlanan yanıtlar, Visual Studio 2012'yi kullandığınız sürece sorunsuz çalışır. VS 2013 için de bu başarısız olur. Bunun Visual Studio'nun tüm sürümleriyle çalışması için şunları yapmanız gerekir:

  • Yüklenemeyen projenin proje dosyasını (.csproj) açın
  • Aramak <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
  • Olarak değiştir <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
  • Projeyi yeniden yükleyin

Bu, Visual Studio'nun doğru sürümünü dinamik ve doğru bir şekilde ayarlayacaktır.


2
Benjamin'in çözümünü beğendim, ancak yaşadığım sorun v11 klasörünün eksik olmasıydı, çünkü muhtemelen vs2010 kullanan ve henüz vs2012'ye yükseltmedik
Dai Bok

7
Bu beni doğru yolda başlattı, ancak yaptığım değişiklik <UsingTask TaskName = "TransformXml" ...> düğümünde oldu. AssemblyFile dosyam yanlış sürümü kullanıyordu. Sadece sürümü burada değiştirmek gerekiyordu. Başka bir seçenek, sürümü açıkça ayarlamak yerine bir sürüm makrosu kullanmaktır.
Scott

5
$(VisualStudioVersion)daha eski bir sürümü döndürüyor :(
Jaider

1
Bu bir parametre olabilir: stackoverflow.com/questions/20002532/…
Jaider

2
VS2015'ten VS2017'ye yükseltme yaparken mükemmel çalışır. Şimdi çözümü her iki IDE'de de açabilirim.
Yury Schkatula

29

Benimkini çalıştırmak için, v10.0klasörümü kopyaladım ve olarak yeniden adlandırdım v11.0ve bundan sonra işler iyi gidiyor gibi görünüyor. Şimdilik hızlı düzeltme budur.

Bu muhtemelen en iyi çözüm olmadığından ve işe yaramasına rağmen, Windows 7 için Microsoft Windows SDK'yı ve Windows 7 ve .NET Framework 4 için .NET Framework 4 Windows SDK'yı yüklemeyi deneyecektim , ancak çok uzun sürüyor indir.


1
V10.0'da 'Web' klasörünü görmedim. Ben de onu v12.0 klasöründen v11.0 klasörüne kopyaladım.
Sundeep

9

Bu sorunla birkaç gündür derleme sunucumuzda mücadele ediyordum, bu yüzden geldiğim çözümü belgeleyeceğimi düşündüm. İlk olarak, derleme sunucumda web yayımlama uzantıları yüklü . TransformXml görevini bir web uygulaması projesinin içinde kalbimin içeriğine kullanabilirim.

Bunu bir web uygulaması projesinin dışında kullanmak için , UsingTask öğesini projeme eklemeye ve ms build özelliklerini (Benjamin'in gösterdiği gibi) kullanarak doğru yere işaret etmeye çalıştım. Ancak, derleme sunucumda orada değillerdi (derleme sunucularının dosya sistemine kolay erişime sahip olanlar muhtemelen bunu atlayabilir ve yalnızca ilgili paketi Visual Studio'ya yükleyebilir). Hatta görsel stüdyo sürümlerini zor kodlayacak kadar ileri gittim, ama her zaman bu hatayı üstüme bıraktı.

Sonunda pes ettim, DLL'leri yerel bilgisayarımdan çektim:

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

Bunları kaynak kontrolüne yükledim ve bu klasörü yapımın çalışma alanına ekledim (Yapı Tanımını Düzenle -> Kaynak Ayarları -> Kaynak Kontrol Klasörü). Oradan, klasöre başvurmam bile gerekmiyor - işte UsingTask'ım şöyle görünüyor:

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

Artık TransformXml görevini herhangi bir projeden kalbimin içeriğine kullanabilirim.


9
MSBuild.Microsoft.VisualStudio.Web.targets paketi VS yüklü olmadan oluşturmak için gerekli hedefleri var. Örneğin: <UsingTask TaskName = "TransformXml" AssemblyFile = "packages \ MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1 \ tools \ VSToolsPath \ Web \ Microsoft.Web.Publishing.Tasks.dll" />. Daha fazla ayrıntı için bu bloga göz
atın

1
Hey @moonpatrol, bir cevap vermelisin, çünkü bu yolu tercih ediyorum - paketi kurmak ve sonra ona başvurmak - kesinlikle evrensel çözüm :-) Sadece denedim ve mükemmel çalışıyor. Yine de teşekkürler! Cevap verirsen bana ping at, oylayayım.
Tengiz

9

Sorunu çözmek için,

  1. Bilgisayarınızda Visual Studio Installer'ı bulun
  2. Yükleyiciyi başlatmak için tıklayın veya dokunun ve ardından Değiştir öğesini seçin.
  3. Bağımsız Bileşenler ekranından, Asp.net ve web geliştirme araçlarını seçin ve ardından Değiştir / Kur'u seçin.

Bu, belirtilen yolda dll'leri oluşturduğu için sorunu çözdü.


2
VS2017 kullanıyorum ve bu adımı gerçekleştirmek bu dosyaları oluşturmuyor. Sanırım seçtiğiniz başka bir şey (veya ASP.net ve web geliştirme araçlarıyla birlikte) onu ekliyor. Ne olduğundan emin değilim :(
Kris

Ben sadece bunu seçtim. Web ile ilgili bileşenleri seçmeyi deneyin ve kurun. Yine de iyi şanslar.
Vinodhini Ramasamy

Tüm web iş akışını denedim ve hala bu dosyalara sahip değilim. Bu çözümün çok yakın olduğunu hissediyorum. Sabit
Robert Snyder

4
VS2017 için yaptım Tools → Get Tools and Features... → Individual Components: Windows 10 SDK (10.0.14393.0) and ASP.NET and web development tools . Bu hile yaptı gibi görünüyor.
John Jones

6

VS2019 için

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

Ben yerini MSBuildToolsVersionile VisualStudioVersion.


Bu belge ile " docs.microsoft.com/visualstudio/msbuild/… " MSBuildToolsVersion'ı VisualStudioVersion ile değiştirin ve ardından bu özelliği şu şekilde iyi çalışan " $ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v $ (VisualStudioVersion) "
Kim Ki Won

5

VisualStudio klasörümde yalnızca v12.0, v14.0 ve v15.0 olduğundan, proje dosyamı düzenleyip referans yolunu v10.0'dan v14.0'a değiştiriyorum. Ardından proje başarıyla inşa edilir.

Önce:

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

Sonra:

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

2

Bunun doğru cevabı, söz konusu projeyi kaldırmak ve ardından csproj dosyasını düzenlemek, 10.0 yolunu referans aldıkları bir girişi aramak ve bunun yerine 11.0'ı gösterecek şekilde değiştirmektir.


Bunun için +1. Çalışma alanı klasörlerimi bir dev makineden diğerine kopyaladığımda bu soruna neden oldum. İkinci geliştirme makinesinde v10 değil, v11 kuruldu. Böylece v10 klasörü boştu.
maplemale

1

Çalışması için iki şeye ihtiyacınız var:

1) Oluşturma sunucunuzda https://www.visualstudio.com/pl/thank seçili "Web geliştirme oluşturma araçları" seçeneğiyle Visual Studio Derleme Araçlarını (Visual Studio'nun tamamına, yalnızca VS Derleme Araçlarına ihtiyacınız yoktur) yükleyin -you-indiriyor-visual-studio /? sku = BuildTools & rel = 15

2) Microsoft.Web.Publishing.Tasks.dll yolunun doğru olduğundan emin olun

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

1

Benim için yalnızca NuGet paketine MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3'e başvuru ekleyerek çalışmaya başladı

Paket yazarı tarafından belirtildiği gibi proje dosyasına UsingTask öğesi eklemeye gerek bile yok

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

NuGet paketini kurmanız yeterlidir. Paket, araçlar klasöründeki hedefler dosyasını kullanmak için $ (VSToolsPath) özelliğini otomatik olarak ayarlar.

Sonra TransformXml'yi ve pakette tanımlanan diğer görevleri, örneğin app.config'i dönüştürmek için kullanabildim

  <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

Birinin SDK tarzı bir csproj kullanması durumunda, bunu derleme sunucusuna Visual Studio yüklemenize gerek kalmadan gerçekleştirebilirsiniz.

  1. Öncelikle SlowCheetah nuget paketini projenize yüklemelisiniz . Yükledikten sonra, SDK tarzı projenizde aşağıdakileri göreceksiniz.

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  2. Ardından GeneratePathProperty = "true" özniteliğini eklediğinizden emin olun (aşağıya bakın). Bu, sonraki bölüm için çok önemlidir, çünkü makinenizde nuget paketinin geri yüklendiği yolu yakalamanıza yardımcı olacaktır. George Dangl buradaki makalesinde bunu açıklıyor .

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20" GeneratePathProperty="true">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  3. SlowCheetah hedeflerini projenize aktarın:

    <Import Project="$(PkgMicrosoft_VisualStudio_SlowCheetah)\build\Microsoft.VisualStudio.SlowCheetah.targets" />
    
  4. Artık bazı özel dönüşümleri uygulamak için bir hedef komut (bu durumda yayınlandıktan sonra) kullanabilirsiniz. Gerekirse, aşağıdaki örnekteki değişkenleri kullanmak yerine aşağıdaki dosya adlarını her zaman sabit kodlayabilirsiniz.

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

Daha önce SlowCheetah kullanmadıysanız , kontrol etmenizi tavsiye ederim. Dönüştürme dosyalarını önizlemenizi kolaylaştıracak bir Visual Studio uzantısına sahiptirler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.