7

Ho difficoltà a far distribuire i miei assembly non di terze parti tramite Webdeploy con l'interfaccia utente di Visual Studio 2012. Ho una cartella chiamata 'librerie', che contiene alcuni assiemi. Via quanto segue nel mio file Csproj * posso impostare l'azione Corporatura a 'ThirdPartyAssemblies':Obiettivi di MSBuild e Visual Studio 2012

<ItemGroup> 
    <AvailableItemName Include="ThirdPartyAssemblies"> 
    <Visible>false</Visible> 
    </AvailableItemName> 
</ItemGroup> 
<Target Name="AfterBuild"> 
    <Message Text="Build | Third party assemblies" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 

Questa grande opera; quando costruisco, gli assembly vengono copiati nella root della cartella bin :-) Ora ho un problema: non riesco a far pubblicare questi file sul server tramite Webdeploy. Ho provato molte cose, sembra proprio come non riesco a trovare un bersaglio adatto MSBuild per questo compito ... Con Visual Studio 2010 ho potuto utilizzare questo:

<Target Name="MyTargetName"> 
    <Message Text="Deploy | Third party assemblies" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
<PropertyGroup> 
    <OnAfterCopyAllFilesToSingleFolderForPackage> 
    MyTargetName 
    </OnAfterCopyAllFilesToSingleFolderForPackage> 
</PropertyGroup> 

Il problema è; il target OnAfterCopyAllFilesToSingleFolderForPackage non viene più chiamato: -/

Dopo aver scavato nel C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets' file, I've also tried 'OnAfterCopyAllFilesToSingleFolderForMsdeploy, ma proprio non riesco a farlo funzionare.

Qualcuno può dirmi quale destinazione posso utilizzare per copiare quegli assembly nella cartella Package/il server con Webdeploy?

Perché Visual Studio 2012 non copia la cartella bin completa nella cartella Package?

risposta

8

Grazie a Alexey ho trovato la soluzione al mio problema, questo è quello che sto usando ora nel mio file Csproj per sostenere la copia di assemblee di terze parti per Filesystem- e Webdeploy:

<ItemGroup> 
    <AvailableItemName Include="ThirdPartyAssemblies"> 
     <Visible>false</Visible> 
    </AvailableItemName> 
</ItemGroup> 
<Target Name="AfterBuild"> 
    <Message Text="Build | Copying third party assemblies to output folder ($(OutputPath))" Importance="high" /> 
    <Copy DestinationFolder="$(OutputPath)" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
<Target Name="CopyBinFiles" AfterTargets="CopyAllFilesToSingleFolderForPackage" BeforeTargets="MSDeployPublish"> 
    <Message Text="Deploy | Copying third party assemblies to output folder ($(_PackageTempDir)\bin\)" Importance="high" /> 
    <Copy DestinationFolder="$(_PackageTempDir)\bin\" SourceFiles="@(ThirdPartyAssemblies)" SkipUnchangedFiles="true" /> 
</Target> 
2

Si sta utilizzando vs2012 e questo significa che si dispone di nuovo lucido msbuild 4.0 =). È molto più semplice agganciare la tua chiamata target con il nuovo attributo AfterTargets. È possibile controllare my answer on this question per l'esempio di utilizzo.

+1

FYI VS2010 utilizzato anche msbuild 4.0 –

+1

Lo so;). Non hai affatto bisogno di VS. MSBuild parte di .NET FW, quindi puoi usarlo senza studio. Tranne che vs2010 non usa veramente msbuild.exe, ma VS2012 sì. Ma questa roba è pignola, non legata a domande e risposte. –

Problemi correlati