Подтвердить что ты не робот

Репликация VS2008 "Публикация веб-сайта" из командной строки

Я пытаюсь воспроизвести точную функциональность этого диалога в Visual Studio 2008 в сборке script: alt text http://i41.tinypic.com/1osl1f.png

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

У меня есть Googled вокруг этого и появилось довольно много вещей, связанных с 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?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ссылка

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 компилятор будет разрешить пути, используя физический путь как корень.

Ответ 2

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

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

</Target>

Ответ 3

Добавьте в файл .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

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

msbuild "/t:_CopyWebApplication;ResolveReferences;publish" /p:OutDir="C:\inetpub\wwwroot\[appname]\bin\" /p:WebProjectOutputDir="C:\inetpub\wwwroot\[appname]" c:\directory\[appname].csproj    

Ответ 5

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

Я установил 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 /

Ответ 6

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

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

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

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

Ответ 7

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

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

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

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

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

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

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

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

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

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

Ответ 8

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

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

Ответ 9

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

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

Когда вы публикуете веб-сайт в visual studio 2008, вторая строка вывода - "Предварительная компиляция веб-сайта". Опции visual studio отображаются для публикации карты веб-сайта непосредственно для опций AspNetCompiler и Aspnet_compiler.exe.

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

Ответ 10

Я использую 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\

Ответ 11

Нет ничего волшебного в функции "Опубликовать...", которую вы не могли бы воссоздать самостоятельно, тем более, что вы нацеливаете общий сетевой файл.

В нем ядро, все, что он делает, копирует ваши файлы из одного места в другое. Используя NAnt, вы можете выполнить это с помощью copy или вы можете использовать exec задача вызвать xcopy Если вы используете инструмент построения, отличный от NAnt, уверен, что есть поддержка подобных задач.

Если вы хотите оставить свой необработанный код и отладить информацию позади, вы можете исключить файлы, которые заканчиваются на .cs или .pdb. Оба экземпляра NAnt и xcopy предоставляют простые способы сделать это.