2012-02-07 9 views
23

Próbuję skopiować polecenie Visual Publish 2010 "Publikuj ..." (dotyczy projektów aplikacji WWW), gdzie chciałbym w UI wybrać Opublikuj metodę: "System plików".Jak używać MsBuild MsDeployPublish do kierowania na lokalny system plików?

Moja próba to jest ...

% msbuild%/t: MsDeployPublish/nieruchomość: MsDeployServiceUrl = "file: /// D: \ MyDeploymentFolder"; MsDeployPublishMethod = "File System" „d : \ MySourceFolder \ Project.csproj "

... i po wypróbowaniu metody" FileSystem "," System plików "," Local "i kilka innych.

Błąd pojawia zakłada, że ​​MsDeploy wciąż próbuje naciskać na serwerze IIS:

"D:\MySourceFolder\Project.csproj" (MsDeployPub 
lish target) (1) -> 
(MSDeployPublish target) -> 
    C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web 
.Publishing.targets(3847,5): error : Web deployment task failed.(The metabase k 
ey '/lm/w3svc' could not be found.) [D:\MySourceFolder\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.P 
ublishing.targets(3847,5): error : \r [D:\MySourceFolder\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.P 
ublishing.targets(3847,5): error : The metabase key '/lm/w3svc' could not be fo 
und.\r [D:\MySourceFolder\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.P 
ublishing.targets(3847,5): error : Unable to access the IIS configuration syste 
m. Please make sure you have IIS 7 (or later) installed.\r [D:\MySourceFolder\Project.csproj] 
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.P 
ublishing.targets(3847,5): error : Retrieving the COM class factory for compone 
nt with CLSID {2B72133B-3F5B-4602-8952-803546CE3344} failed due to the followin 
g error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REG 
DB_E_CLASSNOTREG)). [D:\MySourceFolder\Project.csproj] 

Jak mogę kierować system plików do wdrożenia, jak Visual Studio pozwala mi normalnie w GUI?

+0

patrz [Jak opublikować aplikację internetową do określonej lokalizacji (Nant)?] (Http://stackoverflow.com/questions/2928595) –

Odpowiedz

80

jak na moją odpowiedź z Using MSBuild, how do I build an MVC4 solution from the command line (applying Web.config transformations in the process) and output to a folder?

msbuild ProjectFile.csproj /p:Configuration=Release^
          /p:Platform=AnyCPU^
          /t:WebPublish^
          /p:WebPublishMethod=FileSystem^
          /p:DeleteExistingFiles=True^
          /p:publishUrl=c:\output 

Lub jeśli budujemy plik rozwiązanie:

msbuild Solution.sln /p:Configuration=Release^
        /p:DeployOnBuild=True^
        /p:DeployDefaultTarget=WebPublish^
        /p:WebPublishMethod=FileSystem^
        /p:DeleteExistingFiles=True^
        /p:publishUrl=c:\output 
+6

Jest to święty graal budynku pliki web csproj. – Matthew

+1

Jeśli budujesz z Visual Studio 2013, spróbuj dodać '/ p: VisualStudioVersion = 12.0', jeśli pojawi się błąd informujący, że cel' WebPublish' nie istnieje. – Matthew

+0

Jeśli szukałeś tego dla serwera kompilacji (Teamcity), określ w polu 'Targets:': Rebuild WebPublish i sprawdź tę odpowiedź, aby WebPublishing pracował na serwerze agenta bez instalowania visual studio: http: // stackoverflow .com/a/24245360/2901207 – CularBytes

2

Poddałem się, próbując zmusić MSBuild do skopiowania rozmieszczanych plików sieciowych (i nie robiąc niczego innego poza tym), więc napisałem skrypt w PowerShell Jestem bardzo zadowolony z wyniku. Znacznie szybciej niż cokolwiek innego próbowałem przez MSBuild. Oto sedno (literally):

function copy-deployable-web-files($proj_path, $deploy_dir) { 
    # copy files where Build Action = "Content" 
    $proj_dir = split-path -parent $proj_path 
    [xml]$xml = get-content $proj_path 
    $xml.Project.ItemGroup | % { $_.Content } | % { $_.Include } | ? { $_ } | % { 
    $from = "$proj_dir\$_" 
    $to = split-path -parent "$deploy_dir\$_" 
    if (!(test-path $to)) { md $to } 
    cp $from $to 
    } 

    # copy everything in bin 
    cp "$proj_dir\bin" $deploy_dir -recurse 
} 
Powiązane problemy