2010-04-07 11 views
13

W innym miejscu w sieci można znaleźć zalecenia dotyczące użycia czegoś podobnego do symulacji funkcji publikowania w IDE VS 2005-2008 z wiersza poleceń (mam nadzieję Nie skompromitowałem składni!):MSBuild target _CopyWebApplication nie kopiuje wszystkich niezbędnych plików do folderu bin

msbuild /t:ResolveReferences;_CopyWebApplication /p:BuildingProject=true;OutDir=C:\inetpub\wwwroot\ blah.csproj 

Teraz wygląda jak drobna kopia .dll. Istnieją jednak pewne pliki konfiguracyjne i pliki szablonów, które są kopiowane do folderu bin, który jest potrzebny do działania aplikacji. Na przykład plik konfiguracji NHibernate przedstawia w blah.csproj jak:

<None Include="blah.cfg.xml"> 
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> 
</None> 

Podczas korzystania z publikacji w ramach kopii IDE ten plik powinien, wspomniany cel _CopyWebApplication nie. Potrzebuję tego pliku do skopiowania w skrypcie budowania. Czy to pożądane zachowanie dla _CopyWebApplication? Wszelkie zalecenia dotyczące rozwiązania tego problemu?

EDIT 21.04.2010:

Pozwól mi wyjaśnić, że jesteśmy ograniczeni (na razie) do VS 2005 i VS 2008 projektów, a nasze skrypty kompilacji są zapisywane na MSBuild 3.x. Nie jesteśmy jeszcze gotowi, aby przenieść się do VS 2010.

Pozwolę sobie również sprecyzować, że szukamy rozwiązania dostępnego z poziomu wiersza poleceń, abyśmy mogli zautomatyzować polecenie typu Publish wraz z niestandardowymi opcjami kompilacji i ewentualnie automatyzować wdrażanie w dół drogi.

+0

Nieparzysty, miałem ten sam problem i dodanie ResolveReferences przed _CopyWebApplication zostało dla mnie naprawione. Czy na pewno masz ustawioną wartość CopyLocal na wartość True we wszystkich swoich odniesieniach? –

+1

Może chcesz sprawdzić ten błąd http://connect.microsoft.com/VisualStudio/feedback/details/383199/resolvereferences-does-not-correctly-walk-all-references-in-dependent-projects –

+0

@Allen - I nie patrzy na CopyLocal. Przeczytam o tym. – apollodude217

Odpowiedz

6

To tylko obejście.

W skrypcie kompilacji do publikowania witryn sieci Web, po uruchomieniu programu MSBuild na projekt Web samego, aby go opublikować (cele = „ResolveReferences; _CopyWebApplication”), dodałem operacji kopiowania:

<Copy SourceFiles="@(ProjectBinFiles)" DestinationFolder="$(StageBin)\%(ProjectBinFiles.RecursiveDir)" /> 

gdzie ProjectBinFiles jest element reprezentujący pliki w katalogu bin w katalogu źródłowym, a StageBin to właściwość reprezentująca folder bin w katalogu opublikowanej strony. Jak dotąd wydaje się, że działa.

+0

Próbowałem tego na wielu projektach i wydaje się, że działa dobrze. :) – apollodude217

+2

Musisz zdefiniować zmienne "ProjectBinFiles", "StageBin"? Muszę to wypróbować, ale nie jestem pewien, gdzie to wdrożyć w moim zadaniu? – D3vtr0n

+0

Tak, te muszą zostać zdefiniowane przed poleceniem Kopiuj. Ewentualnie możesz kodować dowolnie te wartości. – apollodude217

0

Miałem również podobny problem. Myślę, że odpowiedź jest przy użyciu MSDeploy. Badając go teraz, ale może zapewnić wymaganą funkcjonalność ...

+0

Czy to działa z projektami VS 2005-2008? Mój zespół nie jest jeszcze gotowy, aby przełączyć coś na VS 2010 lub .NET 4, ponieważ wciąż mamy wiele aplikacji wciąż pod VS 2005. – apollodude217

0

Miałem ten sam problem w VS 2012 i ostatecznie ustalone to w następujący sposób do wszystkich plików, które musiały być kopiowane:

  • Ustaw Kopiuj do właściwości pliku wyjściowego do kopiowania, jeśli nowszą
  • Set właściwość pliku Action Build do Content (lub kompilacja, jeśli plik musi zostać skompilowany)