Die TransformXml-Aufgabe konnte nicht aus Microsoft.Web.Publishing.Tasks.dll geladen werden

95

Hat jemand diesen Fehler gesehen und weiß, wie man ihn behebt?

Die Task "TransformXml" konnte nicht aus der Assembly C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll geladen werden.

Datei oder Assembly 'file: /// C: \ Programme (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll' oder eine ihrer Abhängigkeiten konnte nicht geladen werden. Die angegebene Datei wurde vom System nicht gefunden.

Stellen Sie sicher, dass die Deklaration korrekt ist, dass die Assembly und alle ihre Abhängigkeiten verfügbar sind und dass die Aufgabe eine öffentliche Klasse enthält, die Microsoft.Build.Framework.ITask implementiert.

Ich habe an anderer Stelle gelesen, dass das Problem darin besteht, dass Sie SQL Server nicht installiert haben. Aber ich habe SQL Express 2012 x64 mit SP1 installiert. Ich verwende auch VS 2013 Professional.

Ich habe genau diese Lösung in VS 2012 Express ohne Probleme ausgeführt.

Allencodiert
quelle
1
Dies sollte ein Nuget-Paket sein. Ich mag diese versteckten Referenzen in meinem Projekt nicht.
Jaider
Sie sollten die Antwort von Benjamin Scheibe als die richtige markieren. Es scheint die beste Lösung zu sein
BHuelse

Antworten:

163

Die Antworten von Dai Bok und emalamisura funktionieren einwandfrei, solange Sie Visual Studio 2012 verwenden. Für VS 2013 schlägt dies ebenfalls fehl. Damit dies mit allen Versionen von Visual Studio funktioniert, sollten Sie:

  • Öffnen Sie die Projektdatei (.csproj) des Projekts, das nicht geladen werden kann
  • Suchen nach <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
  • Ändern Sie es in <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
  • Laden Sie das Projekt neu

Dadurch wird die richtige Version von Visual Studio dynamisch und ordnungsgemäß festgelegt.

Ben Sch
quelle
2
Ich mag Ihre Lösung Benjamin, aber das Problem, das ich hatte, war, dass der v11-Ordner fehlte, möglicherweise, weil wir einige Leute haben, die vs2010 verwenden und noch nicht auf vs2012 aktualisiert haben
Dai Bok
7
Dies brachte mich auf den richtigen Weg, aber die Änderung, die ich vorgenommen habe, betraf den Knoten <UsingTask TaskName = "TransformXml" ...>. Meine AssemblyFile verwendete die falsche Version. Musste nur die Version hier ändern. Eine andere Möglichkeit wäre, ein Versionsmakro zu verwenden, anstatt die Version explizit festzulegen.
Scott
5
$(VisualStudioVersion)gibt eine frühere Version zurück :(
Jaider
1
Dies kann ein Parameter sein: stackoverflow.com/questions/20002532/…
Jaider
2
Funktioniert perfekt beim Upgrade von VS2015 auf VS2017. Jetzt kann ich die Lösung in beiden IDEs öffnen.
Yury Schkatula
29

Um meinen zum Laufen zu bringen, habe ich einfach meinen v10.0Ordner kopiert und in umbenannt v11.0, und von da an scheint alles gut zu funktionieren. Das ist die schnelle Lösung für jetzt.

Da dies wahrscheinlich nicht die beste Lösung ist und obwohl es funktioniert, wollte ich versuchen, das Microsoft Windows SDK für Windows 7 und .NET Framework 4 zu installieren. Windows SDK für Windows 7 und .NET Framework 4 dauert jedoch zu lange herunterladen.

Dai Bok
quelle
1
Ich habe den Ordner 'Web' in Version 10.0 nicht gesehen. Also habe ich es aus dem Ordner v12.0 in den Ordner v11.0 kopiert.
Sundeep
9

Ich habe dieses Problem auf unserem Build-Server mehrere Tage lang bekämpft, also dachte ich, ich würde die Lösung dokumentieren, zu der ich gekommen bin. Zunächst sind auf meinem Build-Server die Web Publishing-Erweiterungen installiert . Ich kann die TransformXml-Aufgabe nach Herzenslust in einem Webanwendungsprojekt verwenden.

Um es außerhalb eines Webanwendungsprojekts zu verwenden, habe ich versucht, das UsingTask-Element zu meinem Projekt hinzuzufügen und es mithilfe der ms-Build-Eigenschaften auf die richtige Stelle zu verweisen (wie Benjamin gezeigt hat). Sie waren jedoch nicht auf meinem Build-Server vorhanden (diejenigen mit einfachem Zugriff auf das Dateisystem ihres Build-Servers können dies wahrscheinlich überspringen und einfach das entsprechende Paket in Visual Studio installieren). Ich ging sogar so weit, Visual Studio-Versionen mit hartem Code zu erstellen, aber dieser Fehler fiel mir immer auf.

Ich gab schließlich auf und zog die DLLs von meinem lokalen PC:

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

Ich habe sie in die Quellcodeverwaltung hochgeladen und diesen Ordner zum Arbeitsbereich meines Builds hinzugefügt (Build-Definition bearbeiten -> Quelleinstellungen -> Quellcodeverwaltungsordner). Von dort aus muss ich nicht einmal mehr auf den Ordner verweisen - so sieht meine UsingTask aus:

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

Jetzt kann ich die TransformXml-Aufgabe nach Herzenslust aus jedem Projekt verwenden.

bvoyelr
quelle
9
Das Paket MSBuild.Microsoft.VisualStudio.Web.targets verfügt über die erforderlichen Ziele, die ohne VS erstellt werden können. Zum Beispiel: <UsingTask TaskName = "TransformXml" AssemblyFile = "packages \ MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1 \ tools \ VSToolsPath \ Web \ Microsoft.Web.Publishing.Tasks.dll" />. Siehe diesen Blog für weitere Details
Moonpatrol
1
Hey @moonpatrol, du solltest es zu einer Antwort machen, denn ich bevorzuge diesen Weg - Paket installieren und dann weiterleiten - absolut universelle Lösung :-) Ich habe es gerade versucht und funktioniert perfekt. Trotzdem danke! Wenn Sie eine Antwort geben, rufen Sie mich einfach an und ich werde abstimmen.
Tengiz
9

Um das Problem zu beheben,

  1. Suchen Sie das Visual Studio-Installationsprogramm auf Ihrem Computer
  2. Klicken oder tippen Sie auf, um das Installationsprogramm zu starten, und wählen Sie dann Ändern aus.
  3. Wählen Sie im Bildschirm Einzelkomponenten die Option Asp.net und Webentwicklungstools aus, und wählen Sie dann Ändern / Installieren aus.

Dies löste das Problem, da die DLLs im genannten Pfad erstellt wurden.

Vinodhini Ramasamy
quelle
2
Ich verwende VS2017 und durch Ausführen dieses Schritts werden diese Dateien nicht erstellt. Ich denke, vielleicht haben Sie etwas anderes ausgewählt (oder in Kombination mit ASP.net und Webentwicklungstools), das es hinzugefügt hat. Ich bin mir nicht sicher, was :(
Kris
Ich habe nur das ausgewählt. Versuchen Sie, webbezogene Komponenten auszuwählen und zu installieren. Viel Glück.
Vinodhini Ramasamy
Ich habe gerade den gesamten Web-Workflow ausprobiert und habe diese Dateien immer noch nicht. Ich denke, diese Lösung ist so nah. Ich wünschte, es könnte genau bestimmt werden, da ich nur begrenzten Platz auf meiner Festplatte habe, um Komponenten zu installieren
Robert Snyder
4
Für VS2017 habe ich getan Tools → Get Tools and Features... → Individual Components: Windows 10 SDK (10.0.14393.0) and ASP.NET and web development tools . Dies scheint den Trick getan zu haben.
John Jones
5

Da sich in meinem VisualStudio-Ordner nur v12.0, v14.0 und v15.0 befinden, bearbeite ich meine Projektdatei und ändere den Referenzpfad von v10.0 in v14.0. Dann wird das Projekt erfolgreich erstellt.

Vor:

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

Nach dem:

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

Für VS2019

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

Ich habe ersetzt MSBuildToolsVersiondurch VisualStudioVersion.

vik_78
quelle
Durch dieses Dokument " docs.microsoft.com/visualstudio/msbuild/… " ändern Sie MSBuildToolsVersion mit VisualStudioVersion, dann ändere ich diese Eigenschaft, die gut wie folgt funktioniert: " $ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v $ (VisualStudioVersion) "
Kim Ki Won
2

Die richtige Antwort darauf besteht darin, das betreffende Projekt zu entladen und dann die csproj-Datei zu bearbeiten, nach einem Eintrag zu suchen, in dem auf den 10.0-Pfad verwiesen wird, und ihn stattdessen in 11.0 zu ändern.

Emalamisura
quelle
+ 1 dafür. Ich habe dieses Problem verursacht, als ich meine Arbeitsbereichsordner von einem Entwicklungscomputer auf einen anderen kopiert habe. Auf der zweiten Entwicklungsmaschine war v11 installiert, nicht v10. Somit war der v10-Ordner leer.
Maplemale
1

Sie benötigen zwei Dinge, damit es funktioniert:

1) Installieren Sie Visual Studio Build Tools (Sie benötigen nicht das gesamte Visual Studio, nur die VS Build Tools) mit der ausgewählten Option "Web Development Build Tools" auf Ihrem Build Server https://www.visualstudio.com/pl/thank -you-downloading-visual-studio /? sku = BuildTools & rel = 15

2) Stellen Sie sicher, dass der Pfad zu Microsoft.Web.Publishing.Tasks.dll korrekt ist

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

Für mich funktionierte es nur durch Hinzufügen eines Verweises auf das NuGet-Paket MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3

Es ist auch nicht erforderlich, das UsingTask-Element zur Projektdatei hinzuzufügen, wie vom Paketautor angegeben

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

Installieren Sie einfach das NuGet-Paket. Das Paket legt automatisch die Eigenschaft $ (VSToolsPath) fest, um die Zieldatei im Ordner tools zu verwenden.

Und dann konnte ich TransformXml und andere im Paket definierte Aufgaben verwenden, um beispielsweise app.config zu transformieren

  <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>
Rechnung
quelle
0

Nur für den Fall, dass jemand ein csproj im SDK-Stil verwendet, können Sie dies erreichen, ohne Visual Studio auf dem Build-Server installieren zu müssen.

  1. Zuerst sollten Sie das SlowCheetah-Nuget-Paket in Ihrem Projekt installieren . Nach der Installation wird in Ihrem SDK-Projekt Folgendes angezeigt.

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  2. Stellen Sie dann sicher, dass Sie das Attribut GeneratePathProperty = "true" hinzufügen (siehe unten). Dies ist für den nächsten Teil sehr wichtig, da Sie so den Pfad ermitteln können, auf dem das Nuget-Paket auf Ihrem Computer wiederhergestellt wird. George Dangl erklärt es in seinem Artikel hier .

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20" GeneratePathProperty="true">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  3. Importieren Sie die SlowCheetah-Ziele in Ihr Projekt:

    <Import Project="$(PkgMicrosoft_VisualStudio_SlowCheetah)\build\Microsoft.VisualStudio.SlowCheetah.targets" />
    
  4. Sie können jetzt einen Zielbefehl (in diesem Fall nach der Veröffentlichung) verwenden, um einige benutzerdefinierte Transformationen anzuwenden. Bei Bedarf können Sie die folgenden Dateinamen jederzeit fest codieren, anstatt die Variablen im folgenden Beispiel zu verwenden.

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

Wenn Sie SlowCheetah noch nicht verwendet haben , empfehle ich, es auszuprobieren . Sie verfügen über eine Visual Studio-Erweiterung, die Ihnen die Vorschau von Transformationsdateien erleichtert.

Eric Chhun
quelle