7

Ich habe eine harte Zeit bekommen meine Drittanbieter Non-Referenz-Baugruppen über Webdeploy mit der Visual Studio 2012 UI bereitgestellt. Ich habe einen Ordner namens "Bibliotheken", die einige Baugruppen enthält. über den folgend in der Datei meiner * CSPROJ ich die Build Action zu 'ThirdPartyAssemblies' einstellen:MSBuild Ziele und Visual Studio 2012 Probleme

<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> 

Dies funktioniert gut; Wenn ich baue, werden die Assemblies in den Root des bin-Ordners kopiert :-) Jetzt habe ich ein Problem: Ich kann diese Dateien nicht über Webdeploy auf dem Server veröffentlichen. Ich habe viele Dinge probiert, es scheint nur, wie ich kein geeignetes MSBuild Ziel für diese Aufgabe ... Mit Visual Studio 2010 finden kann ich diese nutzen könnten:

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

Das Problem ist; das OnAfterCopyAllFilesToSingleFolderForPackage Ziel wird nicht mehr aufgerufen: -/

Nach dem Graben in die C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets' file, I've also tried 'OnAfterCopyAllFilesToSingleFolderForMsdeploy, aber ich kann es einfach nicht zur Arbeit bekommen.

Kann mir jemand sagen, welches Ziel ich verwenden kann, um diese Baugruppen in den Paketordner/den Server mit Webdeploy zu kopieren?

Warum kopiert Visual Studio 2012 nicht den vollständigen Fachordner in den Paketordner?

Antwort

8

Dank Alexey ich die Lösung für mein Problem gefunden wird, ist das, was in meiner CSPROJ-Datei Ich verwende jetzt das Kopieren von Dritten Baugruppen für das Dateisystem und WebDeploy zu unterstützen: auch

<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

Sie verwenden vs2012 und das bedeutet, Sie haben glänzende neue Msbuild 4.0 =). Es ist viel einfacher, Ihren Zielanruf mit dem neuen Attribut AfterTargets zu verknüpfen. Sie können my answer on this question für Verwendungsbeispiel überprüfen.

+1

FYI VS2010 verwendet Msbuild 4.0 –

+1

Ich weiß;). Sie brauchen VS überhaupt nicht. MSBuild Teil von .NET FW, so dass Sie es ohne Studio überhaupt verwenden können. Außer dass vs2010 nicht wirklich msbuild.exe verwendet, aber VS2012 tut. Aber dieses Zeug ist pingelig, nicht verwandt mit Frage und Antwort. –