Как использовать MsBuild MsDeployPublish для целевой локальной файловой системы? - PullRequest
36 голосов
/ 07 февраля 2012

Я пытаюсь скопировать команду Visual Studio 2010 «Опубликовать ...» (применимо к проектам веб-приложений), где в пользовательском интерфейсе я выбрал бы метод публикации: «Файловая система».

Моя попытка это ...

% msbuild% / t: MsDeployPublish / property: MsDeployServiceUrl = "file: /// d: \ MyDeploymentFolder"; MsDeployPublishMethod = "Файловая система" "d: \ MySourceFolder \ Project.csproj"

... и попробовав метод «Файловая система», «Файловая система», «Локальный» и некоторые другие.

Ошибка, которую я получаю, подразумевает, что MsDeploy все еще пытается отправить на сервер 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]

Как настроить целевую файловую систему для развертывания, поскольку Visual Studio обычно позволяет мне работать в графическом интерфейсе?

Ответы [ 4 ]

125 голосов
/ 08 января 2014

Согласно моему ответу от Используя MSBuild, как мне построить решение MVC4 из командной строки (применяя преобразования Web.config в процессе) и вывести в папку?

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

Или, если вы создаете файл решения:

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

Вы также можете нацелить проект через решение , используя синтаксис /t:SolutionFolder/Project:Target:

msbuild Solution.sln /t:SolutionFolder/ProjectFile:WebPublish ^
                     /p:Configuration=Release ^ 
                     /p:WebPublishMethod=FileSystem ^
                     /p:DeleteExistingFiles=True ^
                     /p:publishUrl=c:\output
2 голосов
/ 25 февраля 2014

Я прекратил попытки заставить MSBuild копировать развертываемые веб-файлы (и не делать ничего, кроме этого), поэтому я написал его в PowerShell и действительно доволен результатом. Гораздо быстрее, чем все, что я пробовал через MSBuild. Вот суть ( буквально ):

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
}
0 голосов
/ 08 ноября 2018

Просто хотел опубликовать мой результат, используя этот предыдущий ответ (https://stackoverflow.com/a/20982171/915865), который был именно то, что мне нужно.

screenshot of result +1!

0 голосов
/ 07 февраля 2012

Я не думаю, что вы достаточно конкретны с тем, что говорите msbuild.

Вытащил это из одной из моих закладок по теме, надеюсь, это поможет: http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...