Impossibile caricare l'attività TransformXml da Microsoft.Web.Publishing.Tasks.dll


95

Qualcuno ha visto questo errore e sa come risolverlo?

Impossibile caricare l'attività "TransformXml" dall'assembly C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll.

Impossibile caricare il file o l'assembly "file: /// C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web \ Microsoft.Web.Publishing.Tasks.dll" o una delle sue dipendenze. Il sistema non trova il file specificato.

Verificare che la dichiarazione sia corretta, che l'assembly e tutte le sue dipendenze siano disponibili e che l'attività contenga una classe pubblica che implementa Microsoft.Build.Framework.ITask.

Ho letto altrove che il problema è quando non hai installato SQL Server. Ma ho SQL Express 2012 x64 installato con SP1. Sto anche eseguendo VS 2013 Professional.

Ho eseguito la stessa identica soluzione in VS 2012 express senza problemi.


1
Questo dovrebbe essere un pacchetto nuget. Non mi piacciono questi riferimenti nascosti all'interno del mio progetto.
Jaider

Dovresti contrassegnare la risposta di Benjamin Scheibe come quella corretta. Sembra essere la soluzione migliore
BHuelse

Risposte:


163

Le risposte fornite da Dai Bok e da emalamisura funzionano bene fintanto che si utilizza Visual Studio 2012. Anche per VS 2013 non funziona. Per fare in modo che funzioni con tutte le versioni di Visual Studio dovresti:

  • Aprire il file di progetto (.csproj) del progetto che non è stato caricato
  • Cercare <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets" />
  • Cambia in <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.targets" />
  • Ricarica il progetto

Ciò imposterà la versione corretta di Visual Studio in modo dinamico e corretto.


2
Mi piace la tua soluzione Benjamin, ma il problema che stavo avendo era che mancava la cartella v11, forse perché alcune persone usano vs2010 e non abbiamo ancora aggiornato a vs2012
Dai Bok

7
Questo mi ha fatto iniziare sulla strada giusta, ma la modifica che ho apportato è stata al nodo <UsingTask TaskName = "TransformXml" ...>. Il mio AssemblyFile utilizzava la versione sbagliata. Dovevo solo cambiare la versione qui. Un'altra opzione sarebbe quella di utilizzare una macro di versione invece di impostare esplicitamente la versione.
Scott

5
$(VisualStudioVersion)sta restituendo una versione precedente :(
Jaider

1
Questo può essere un parametro: stackoverflow.com/questions/20002532/...
Jaider

2
Funziona perfettamente durante l'aggiornamento da VS2015 a VS2017. Ora posso aprire la soluzione in entrambi gli IDE.
Yury Schkatula

29

Per far funzionare il mio, ho semplicemente copiato la mia v10.0cartella e l'ho rinominata in v11.0, e da quel momento in poi le cose sembrano funzionare bene. Questa è la soluzione rapida per ora.

Poiché questa probabilmente non è la soluzione migliore e sebbene funzioni, stavo per provare a installare Microsoft Windows SDK per Windows 7 e .NET Framework 4 Windows SDK per Windows 7 e .NET Framework 4, ma ci vuole troppo tempo per Scarica.


1
Non ho visto la cartella "Web" nella v10.0. Quindi l'ho copiato dalla cartella v12.0 alla cartella v11.0.
Sundeep

9

Ho combattuto questo problema sul nostro server di compilazione per diversi giorni, quindi ho pensato di documentare la risoluzione a cui sono arrivato. Innanzitutto, il mio server di compilazione ha le estensioni di pubblicazione web installate . Posso utilizzare l'attività TransformXml a mio piacimento all'interno di un progetto di applicazione web.

Per usarlo al di fuori di un progetto di applicazione web, ho provato ad aggiungere l'elemento UsingTask al mio progetto e puntarlo nel posto giusto usando le proprietà di ms build (come ha dimostrato Benjamin). Tuttavia, non erano presenti sul mio server di compilazione (quelli con facile accesso al file system del proprio server di compilazione possono probabilmente ignorarlo e installare semplicemente il pacchetto pertinente su Visual Studio). Sono persino arrivato al punto di codificare le versioni di Visual Studio, ma questo errore mi è sempre caduto addosso.

Alla fine mi sono arreso, ho estratto le DLL dal mio PC locale:

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

Li ho caricati nel controllo del codice sorgente e ho aggiunto quella cartella all'area di lavoro della mia build (Modifica definizione build -> Impostazioni sorgente -> Cartella controllo codice sorgente). Da lì, non ho nemmeno bisogno di fare riferimento alla cartella: ecco come appare il mio UsingTask:

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

Ora posso utilizzare l'attività TransformXml a mio piacimento da qualsiasi progetto.


9
Il pacchetto MSBuild.Microsoft.VisualStudio.Web.targets ha le destinazioni necessarie per creare senza VS installato. Ad esempio: <UsingTask TaskName = "TransformXml" AssemblyFile = "packages \ MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1 \ tools \ VSToolsPath \ Web \ Microsoft.Web.Publishing.Tasks.dll" />. Vedi questo blog per maggiori dettagli
moonpatrol

1
Ehi @moonpatrol, dovresti dargli una risposta, perché preferisco questo modo - installare il pacchetto e poi riferirlo - soluzione assolutamente universale :-) L'ho appena provato e funziona perfettamente. Grazie lo stesso! se gli dai una risposta, inviami un ping e voterò.
Tengiz

9

Per risolvere il problema,

  1. Trova il programma di installazione di Visual Studio nel tuo computer
  2. Fare clic o toccare per avviare il programma di installazione, quindi selezionare Modifica.
  3. Dalla schermata Componenti individuali, seleziona Asp.net e strumenti di sviluppo web, quindi seleziona Modifica / Installa.

Questo ha risolto il problema in quanto crea le DLL nel percorso menzionato.


2
Sto usando VS2017 e l'esecuzione di questo passaggio non crea quei file. Penso che forse qualcos'altro che hai selezionato (o in combinazione con ASP.net e strumenti di sviluppo web) che lo ha aggiunto. Non sono sicuro di cosa però :(
Kris

Ho selezionato solo quello. Prova a selezionare i componenti relativi al Web e installa. Buona fortuna però.
Vinodhini Ramasamy

Ho appena provato l'intero flusso di lavoro Web e ancora non ho quei file. Sento che questa soluzione è così vicina. Vorrei che potesse essere appuntato poiché ho spazio limitato sul mio HDD per installare i componenti
Robert Snyder

4
Per VS2017, l'ho fatto Tools → Get Tools and Features... → Individual Components: Windows 10 SDK (10.0.14393.0) and ASP.NET and web development tools . Questo sembra aver risolto il problema.
John Jones

5

Poiché nella mia cartella VisualStudio sono presenti solo v12.0, v14.0 e v15.0, modifico il file di progetto e cambio il percorso di riferimento da v10.0 a v14.0. Quindi il progetto viene compilato correttamente.

Prima:

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

Dopo:

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

5

Per VS2019

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

Ho sostituito MSBuildToolsVersioncon VisualStudioVersion.


Con questo documento " docs.microsoft.com/visualstudio/msbuild/… " modifica MSBuildToolsVersion con VisualStudioVersion quindi cambio quella proprietà funzionando bene in questo modo " $ (MSBuildExtensionsPath32) \ Microsoft \ VisualStudio \ v $ (VisualStudioVersion) "
Kim Ki Won

2

La risposta corretta a questo è scaricare il progetto in questione e quindi modificare il file csproj, cercare una voce in cui fanno riferimento al percorso 10.0 e modificarlo in modo che punti a 11.0.


+1 per quello. Ho causato questo problema quando ho copiato le cartelle dello spazio di lavoro da una macchina di sviluppo a un'altra. La seconda macchina di sviluppo aveva installato la v11, non la v10. Pertanto, la cartella v10 era vuota.
maplemale

1

Hai bisogno di due cose per farlo funzionare:

1) Installa Visual Studio Build Tools (non è necessario l'intero Visual Studio, solo VS Build Tools) con l'opzione "Strumenti di compilazione per lo sviluppo Web" selezionata sul tuo server di compilazione https://www.visualstudio.com/pl/thank -you-download-visual-studio /? sku = BuildTools & rel = 15

2) Assicurati che il percorso di Microsoft.Web.Publishing.Tasks.dll sia corretto

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

1

Per me ha iniziato a funzionare semplicemente aggiungendo un riferimento al pacchetto NuGet MSBuild.Microsoft.VisualStudio.Web.targets v14.0.0.3

Non è nemmeno necessario aggiungere l'elemento UsingTask al file di progetto come menzionato dall'autore del pacchetto

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

Basta installare il pacchetto NuGet. Il pacchetto imposta automaticamente la proprietà $ (VSToolsPath) per utilizzare il file di destinazione nella cartella degli strumenti.

E poi sono stato in grado di utilizzare TransformXml e altre attività, definite nel pacchetto, ad esempio per trasformare 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

Nel caso in cui qualcuno stia usando un csproj in stile SDK, puoi farlo senza dover installare Visual Studio sul server di compilazione.

  1. Per prima cosa dovresti installare il pacchetto nuget SlowCheetah nel tuo progetto. Una volta installato, vedrai quanto segue nel tuo progetto in stile SDK.

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  2. Quindi assicurati di aggiungere l' attributo GeneratePathProperty = "true" (vedi sotto). Questo è molto importante per la parte successiva perché ti aiuterà ad afferrare il percorso in cui il pacchetto nuget viene ripristinato sulla tua macchina. George Dangl lo spiega nel suo articolo qui .

    <PackageReference Include="Microsoft.VisualStudio.SlowCheetah" Version="3.2.20" GeneratePathProperty="true">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    
  3. Importa gli obiettivi SlowCheetah nel tuo progetto:

    <Import Project="$(PkgMicrosoft_VisualStudio_SlowCheetah)\build\Microsoft.VisualStudio.SlowCheetah.targets" />
    
  4. È ora possibile utilizzare un comando di destinazione (in questo caso dopo la pubblicazione) per applicare alcune trasformazioni personalizzate. Se necessario, puoi sempre codificare i nomi dei file sotto invece di usare le variabili nell'esempio sotto.

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

Se non hai mai usato SlowCheetah prima, ti consiglio di provarlo . Hanno un'estensione di Visual Studio che renderà più semplice l'anteprima dei file di trasformazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.