Репликация VS2008 «Опубликовать веб-сайт» из командной строки - PullRequest
36 голосов
/ 22 апреля 2009

Я пытаюсь воспроизвести точную функциональность этого диалога в Visual Studio 2008 в сценарии сборки: alt text

Это веб-сайт ASP.NET , а не веб-приложение .

Я обыскал это и обнаружил немало вещей, связанных с MSBuild, но, похоже, все это касается решений, выложенных в виде веб-приложений ASP.NET:

http://www.driebier.net/post/Using-MSBuild-to-deploy-visual-studio-2005-web-applications.aspx http://blog.donnfelker.com/post/TFS-Build-Not-Publishing-Web-Applications.aspx

Эта статья , похоже, относится к веб-сайтам ASP.NET, но я обнаружил, что получаю сообщение об ошибке при попытке выполнить сборку с использованием этих предложений:

C:\dev\T&A>msbuild /t:_CopyWebApplication /property:OutDir=c:\temp\taweb\ /prope
rty:WebProjectOutputDir=c:\temp\taweb\

Microsoft (R) Build Engine Version 3.5.30729.1
[Microsoft .NET Framework, Version 2.0.50727.3074]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 22/04/2009 11:50:42.
Project "C:\dev\T&A\TAWeb.sln" on node 0 (_CopyWebApplication target(s)).
  Building solution configuration "Debug|.NET".
C:\dev\T&A\TAWeb.sln : error MSB4057: The target "_CopyWebApplication" does not
 exist in the project.
Done Building Project "C:\dev\T&A\TAWeb.sln" (_CopyWebApplication target(s)) --
 FAILED.


Build FAILED.

"C:\dev\T&A\TAWeb.sln" (_CopyWebApplication target) (1) ->
  C:\dev\T&A\TAWeb.sln : error MSB4057: The target "_CopyWebApplication" does n
ot exist in the project.

0 Warning(s)

1 Error(s)

Time Elapsed 00:00:00.06

Решение, которое я пытаюсь опубликовать (унаследовано, а не мое), не имеет файлов .csproj (куда я могу импортировать цель _CopyWebApplication из C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v9 0,0 \ WebApplications \ Microsoft.WebApplication.targets)

Возможно, это различие в Visual Studio 2005/2008?

В любом случае, я чувствую, что иду по неверному пути.

По сути, мне просто нужно добиться точно того, что делает приведенный выше диалог, но из командной строки.

Большое спасибо

Ответы [ 11 ]

38 голосов
/ 29 октября 2009

Следующая команда дублирует диалоговое окно Publish Web Site с настройками по умолчанию.

Команда для публикации веб-сайта с настройками по умолчанию

aspnet_compiler -nologo -v / -p "C:\WebSite1" -u "C:\TargetPath"

1010 * Ссылки * 1) См. Содержимое сообщества с названием Вы хотите опубликовать сайт, но у вас нет Visual Studio, тогда ... в http://msdn.microsoft.com/en-us/library/20yh9f1b(classic).aspx. Microsoft Visual Studio 2005> Командная строка Visual Studio 2005 Microsoft Visual Studio 2008> Командная строка Visual Studio 2008 Microsoft .NET Framework SDK v2.0> Командная строка SDK 2) См. «Инструмент компиляции ASP.NET (Aspnet_compiler.exe)» в http://msdn.microsoft.com/en-us/library/ms229863.aspx. 3) Следующая выдержка из Пошаговое руководство. Развертывание веб-приложения ASP.NET с использованием XCOPY в http://msdn.microsoft.com/en-us/library/f735abw9.aspx Как альтернатива использованию XCOPY инструмент командной строки, который поддерживается всеми версиями .NET Framework, Вы можете использовать новый .NET Framework 2.0 инструмент, расположенный в % SystemRoot% \ Microsoft.NET \ Framework \ версия 2 или более поздняя версия \ Aspnet_compiler.exe для скомпилируйте и разверните ваш веб приложение. Для получения дополнительной информации см. Инструмент компиляции ASP.NET (Aspnet_compiler.exe) . 4) Следующая выдержка из Как: прекомпилировать веб-сайты ASP.NET для развертывания в http://msdn.microsoft.com/en-us/library/ms227976.aspx. Если ваш веб-сайт не является Интернетом Приложение информационных служб (IIS) и, следовательно, не имеет записи в IIS метабазы, использовали следующее значение для ключ -v. aspnet_compiler -p physicalOrRelativePath -v / targetPath В этом случае параметр PhysicalOrRelativePath относится к полностью квалифицированным путь к каталогу, в котором находится веб-сайт файлы расположены, или относительный путь в текущий каталог. Период (.) оператор допускается в Параметр PhysicalOrRelativePath. Ключ -v указывает корень, который компилятор будет использовать для разрешения ссылки на корень приложения (для Например, с оператором тильды (~). Когда вы указываете значение / для ключ -v компилятор решить пути с помощью физического путь как корень.

6 голосов
/ 08 октября 2010

Эта «волшебная» комбинация делает то, что вы ищете. ) Потребовалось всего два дня, чтобы получить правильную комбинацию для моего проекта.) Ключ должен включать цель _CopyWebApplication и цель ResolveReferences.

msbuild "/t:_CopyWebApplication;ResolveReferences;publish" /p:OutDir="C:\inetpub\wwwroot\[appname]\bin\" /p:WebProjectOutputDir="C:\inetpub\wwwroot\[appname]" c:\directory\[appname].csproj    
6 голосов
/ 22 апреля 2009

Я думаю, что вы ищете AspNetCompiler задача

<Target Name="PublishToIIS" DependsOnTargets="Publish">
    <AspNetCompiler    
            VirtualPath="$(IISVirtualPath)"
            TargetPath="$(IISTargetPath)"
            PhysicalPath="$(MSBuildProjectDirectory)/trunk/InternalAppCS/Web.UI/"
            Force="true"
            Debug="$(IISDebug)"
     />

</Target>
5 голосов
/ 11 сентября 2009

Добавить в ваш файл .csproj:

<Target Name="AfterBuild">
<Message Text="Copying to Deployment Dir:" />
<Copy SourceFiles="@(Content)" DestinationFolder="..\PreCompiledWeb\%(Content.RelativeDir)" />
<CreateItem Include="$(OutputPath)\*">
    <Output TaskParameter="Include" ItemName="Binaries"/>
</CreateItem>
<Copy SourceFiles="@(Binaries)" DestinationFolder="..\PreCompiledWeb\bin" />

Измените ".. \ PreCompiledWeb" для папки, в которую вы хотите опубликовать, или вы можете указать переменную что-то вроде: $ (OutputFolder), которую вы можете передать

затем перейдите в папку вашего веб-приложения и выполните:

msbuild /t:Build

Затем вы можете скопировать эти файлы куда угодно, используя xcopy:

xcopy "..\PreCompiledWeb\*.*" "C:\MySite\" /e

Это должно сделать это.

4 голосов
/ 20 сентября 2011

Я боролся с той же ошибкой (MSB4057: цель "_CopyWebApplication" не существует в проекте.

Да. Я использовал проект веб-приложения (не веб-сайт).

Я был сбит с толку, потому что у меня был один работающий проект, а другой - нет. Поэтому я сел с ExamDiffPro и начал сравнивать файлы проекта. То, что я нашел, было разделом цели сборки, в нижней части файла проекта были другие файлы.

Один проект (который работал) был создан с использованием более новой версии Visual Studio. Другой (который НЕ работал) был создан много лет назад и был обновлен за последние годы до текущей версии, с которой я работаю. Обновленный проект, очевидно, не был обновлен с новыми целями сборки, так как стали доступны более новые версии Visual Studio.

В нижней части файла проекта, который работал, я нашел следующее:

<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets" />

Вторая строка импорта НЕ была в проекте, что вызывало проблемы.

Я просто скопировал импорт из рабочего файла и вставил его в относительное место в нерабочем файле, и альт!

Хотя это не является прямым решением исходной проблемы, определенной в этой теме, я надеюсь, что это поможет другим людям, которые наткнулись на эту тему, ища похожие проблемы, только с реальными проектами веб-приложений.

4 голосов
/ 29 апреля 2009

Я использовал msbuild именно для того, что вы описываете. Вы пытались установить свойство как это?

 /property:"OutDir=c:\temp\taweb\;WebProjectOutputDir=c:\temp\taweb\"

Если это все еще не работает, дайте мне знать, и я могу выслать вам мой bat-файл, который использует сценарий msbuild, который получает svn, создает файл assembly.info, развертывает веб-сайт и, наконец, запускает http получить на домашней странице сайта, просто чтобы убедиться, что он построен и развернут правильно.

Надеюсь, это поможет Рихан

4 голосов
/ 22 апреля 2009

Лично я использую buildbot, который выполняет команды для меня, мне пришлось создать сценарий VBS, который выполняет загрузку для меня.

Я установил WinSCP , чтобы выполнить работу ftp, а затем просто написал сценарий загрузки:

Set WshShell = CreateObject("WScript.Shell")
sCmd1 = """C:\Program Files\WinSCP\winscp.com"" <myusername> /command ""option batch on"" ""option confirm off"" ""put " & DefaultPath & strResult & "\" & DefaultFileName & " /Usr/<myuser>/" & updateType & "/" & strResult & "/"" ""exit"""

Для предварительной компиляции веб-сайта из командной строки я делаю следующее, однако я делаю это на веб-сервере, а не перед его загрузкой:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -p "D:\<mycompany>\Backedup\Web Sites\<mysite\Root" -v /
3 голосов
/ 07 апреля 2011

Вот небольшой скрипт PowerShell, который создает решение, а затем публикует из него веб-проект.

MSBuild предназначен для .Net 3.5, поэтому при необходимости измените на \ v4.0 \.

$build = "$env:windir\Microsoft.NET\Framework\v3.5\MSBuild.exe"

$SolutionPath = "C:\Projects\AdminWebSite"
$SolutionFile = "AdminWebSite.sln"
$WebProjectFile = "Admin.Web\Admin.Web.csproj"
$OutputPath = "C:\PublishedSites\Hosts\adminweb"

& $build "$SolutionPath\$SolutionFile" /t:rebuild
& $build "$SolutionPath\$WebProjectFile" "/t:ResolveReferences;_CopyWebApplication;publish" /p:OutDir="$OutputPath\bin\" /p:WebProjectOutputDir="$OutputPath"

ResolveReferences должен стоять перед "_CopyWebApplication", иначе зависимости пропадают.

Примеры путей, приведенных здесь, строятся на:

  • C: \ Project \ AdminWebSite \ AdminWebSite.sln
  • C: \ Project \ AdminWebSite \ Admin.Web \ Admin.Web.csproj
2 голосов
/ 27 октября 2010

Полученная ошибка (C: \ dev \ T & A \ TAWeb.sln: ошибка MSB4057: цель "_CopyWebApplication" не существует в проекте) вызвана двумя проблемами. Во-первых: целевой _CopyWebApplication должен вызываться в файле проекта WebApplication, а не в качестве решения. Второе: на веб-сайте нет файла проекта, в веб-приложениях есть файлы проекта.

Цель _CopyWebApplication применяется только к публикации проекта WebApplication. Используйте задачу AspNetCompiler MSBuild для публикации веб-сайта.

Когда вы публикуете веб-сайт в Visual Studio 2008, вторая строка выводится «Предварительная компиляция веб-сайта». Параметры Visual Studio отображаются для публикации карты веб-сайта непосредственно в параметрах AspNetCompiler и Aspnet_compiler.exe .

.

Хотя я здесь не первый, кто говорит «использовать AspNet_compiler», я подумал, описывая причины, по которым может быть полезным. С другой стороны, я думаю, что AspNet_compiler можно использовать для публикации веб-приложения, но мне нужно провести дополнительное тестирование.

1 голос
/ 20 июля 2011

Я использую файл bat с помощью msbuild.exe (.net 3.5, vs 2008) для «публикации» моего веб-сайта (vbproj) в папке.

% msBuildDir% \ MSBuild "D: \ Project1 \ Client \ WebPresentation \ ConsultaOperaciones.vbproj" / T: ResolveReferences; Rebuild / Р: BuildingProject = TRUE; OutDir = D: \ Instalaciones \ Ultima \ PublicacionWeb \ OutDir \; WebProjectOutputDir = D: \ Instalaciones \ Ultima \ PublicacionWeb \ WebProjectDir \

...