Как использовать MsBuild MsDeployPublish для целевой локальной файловой системы?
Я пытаюсь реплицировать команду "Опубликовать..." Visual Studio 2010 (применительно к проектам веб-приложений), где я бы в пользовательском интерфейсе выбрал метод публикации: "Файловая система" .
Моя попытка...
% msbuild%/t: MsDeployPublish/свойство: MsDeployServiceUrl = "file:///d:\MyDeploymentFolder"; MsDeployPublishMethod = "Файловая система" "d:\MySourceFolder\Project.csproj"
... и попробовал метод "FileSystem", "Файловая система" , "Локальный" и несколько других.
Полученная ошибка подразумевает, что 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 обычно позволяет мне в графическом интерфейсе?
Ответы
Ответ 1
В соответствии с моим ответом Используя 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
Ответ 2
Я сдался, пытаясь заставить MSBuild скопировать разворачиваемые веб файлы (и не делать ничего, кроме этого), поэтому я написал его в PowerShell и очень доволен результатом. Гораздо быстрее, чем все, что я пробовал через MSBuild. Здесь gist (буквально):
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
}
Ответ 3
Я не думаю, что вы достаточно подробно разбираетесь в том, что вы сообщаете msbuild.
Вытащил это из одной из моих закладок на эту тему, надеюсь, это поможет: http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild