7

Mam trudności z uzyskaniem moich niezawierających referencji zestawów wdrożonych za pośrednictwem Webdeploy z interfejsem Visual Studio 2012. Mam folder o nazwie "biblioteki", który zawiera niektóre złożeń. Via następujących w moim pliku * .csproj mogę ustawić Konstruowanie Akcja do 'ThirdPartyAssemblies':Zagadnienia MSBuild i 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> 

Działa to doskonale; podczas kompilacji zbiory są kopiowane do katalogu głównego folderu bin :-) Teraz mam jeden problem: nie mogę uzyskać tych plików opublikowanych na serwerze za pośrednictwem Webdeploy. Próbowałem wielu rzeczy, to po prostu wydaje się, że nie mogę znaleźć odpowiedni cel MSBuild dla tego zadania ... z Visual Studio 2010 mogę użyć tego:

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

Problemem jest; cel OnAfterCopyAllFilesToSingleFolderForPackage nie jest już wywoływany: -/

Po wgraniu do C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets' file, I've also tried 'OnAfterCopyAllFilesToSingleFolderForMsdeploy, ale po prostu nie mogę go uruchomić.

Czy ktoś może mi powiedzieć, jaki cel mogę użyć do skopiowania tych złożeń do folderu Package/the server with Webdeploy?

Dlaczego program Visual Studio 2012 nie kopiuje pełnego folderu bin do folderu Package?

Odpowiedz

8

Dzięki Alexey Znalazłem rozwiązanie mojego problemu, to co używam teraz w moim pliku .csproj wspierać kopiowania zespoły innemu podmiotowi Filesystem- i 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

Używasz vs2012 i oznacza to, że masz nowy błyszczący msbuild 4.0 =). Znacznie prostsze jest zahaczenie połączenia docelowego o nowy atrybut: AfterTargets. Możesz sprawdzić my answer on this question dla przykładu użycia.

+1

FYI VS2010 również używany msbuild 4.0 –

+1

Wiem;). W ogóle nie potrzebujesz VS. MSBuild jest częścią .NET FW, więc możesz go używać bez studia. Poza tym, że vs2010 nie używa naprawdę msbuild.exe, ale VS2012 to robi. Ale te rzeczy są dziurawe, niezwiązane z pytaniem i odpowiedzią. –

Powiązane problemy