从命令行复制VS2008“发布网站”

我想在构build脚本中复制Visual Studio 2008中的对话的确切function: alt text 160wpb4.png

这是一个ASP.NET 网站 ,而不是一个Web 应用程序

我已经围绕这个,并涉及MSBuild相当多的东西,但这似乎都涉及作为ASP.NET Web应用程序布局的解决scheme:

使用方法: 织网,Applications.aspx

本文似乎与ASP.NET网站相关,但是我发现在尝试使用这些build议进行构build时出现错误:

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

 Microsoft(R)Build Engine版本3.5.30729.1
 [Microsoft .NET Framework,版本2.0.50727.3074]
版权所有(C)Microsoft Corporation 2007.保留所有权利。

开始build造22/04/2009 11:50:42。
在节点0(_CopyWebApplication target(s))上的项目“C:\ dev \ T&A \ TAWeb.sln”。
  构build解决schemeconfiguration“Debug | .NET”。
 C:\ dev \ T&A \ TAWeb.sln:错误MSB4057:目标“_CopyWebApplication”不
 存在于项目中。
完成构build项目“C:\ dev \ T&A \ TAWeb.sln”(_CopyWebApplication target(s)) - 
 失败。


build立失败。

 “C:\ dev \ T&A \ TAWeb.sln”(_CopyWebApplication target)(1) - >
   C:\ dev \ T&A \ TAWeb.sln:错误MSB4057:目标“_CopyWebApplication”执行n
没有在项目中存在。

 0警告(S)

 1错误(s)

时间经过00:00:00.06

我试图发布的解决scheme(inheritance,而不是我自己)没有.csproj文件(我可以从C:\ Program Files文件(x86)\ MSBuild \ Microsoft \ VisualStudio \ v9.0 \中导入_CopyWebApplication目标) web应用\ Microsoft.WebApplication.targets)

也许这是一个Visual Studio 2005/2008的差异?

无论如何,我觉得我走错了路。

本质上,我只需要实现上面的对话,但是从命令行。

非常感谢

以下命令使用默认设置复制“ 发布网站”对话框。

使用默认设置发布网站的命令

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 2.0版> SDK命令提示符

2)请参阅“ASP.NET编译工具(Aspnet_compiler.exe)”,地址为: http://msdn.microsoft.com/en-us/library/ms229863.aspx

3)从演练摘录:使用XCOPY部署ASP.NET Web应用程序,地址为: http://msdn.microsoft.com/zh-cn/library/f735abw9.aspx

作为使用所有版本的.NET Framework支持的XCOPY命令行工具的替代方法,可以使用位于%SystemRoot%\ Microsoft.NET \ Framework \ version 2或更高版本的新.NET Framework 2.0工具\ Aspnet_compiler.exe来编译和部署您的Web应用程序。 有关更多信息,请参阅ASP.NET编译工具(Aspnet_compiler.exe) 。

4)摘自如何:预编译用于部署的ASP.NET网站,url为 http://msdn.microsoft.com/zh-cn/library/ms227976.aspx

如果您的网站不是Internet信息服务(IIS)应用程序,因此在IIS元数据库中没有条目,则为-v开关使用以下值。

aspnet_compiler -p physicalOrRelativePath -v / targetPath

在这种情况下,physicalOrRelativePath参数引用Web站点文件所在的完全限定的目录path或相对于当前目录的path。 句点(。)运算符在physicalOrRelativePath参数中是允许的。 -v开关指定编译器将用于parsing应用程序根引用(例如,使用波浪号(〜)运算符)的根。 当您为-v开关指定/的值时,编译器将使用物理path作为根来parsingpath。

我想你正在寻找AspNetCompiler任务

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

添加到您的.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”更改为要发布的文件夹,或者可以指定一个类似以下内容的variables:$(OutputFolder),您可以将其传递

然后去你的web应用程序的文件夹,并做:

 msbuild /t:Build 

然后,您可以使用xcopy复制这些文件:

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

这应该做到这一点。

这个“魔术”组合就是你要找的东西。 )只需要两天就可以为我的项目获得正确的组合。)关键是包含_CopyWebApplication目标和ResolveReferences目标。

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

我个人使用的是为我运行命令的buildbot,我不得不创build一个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""" 

要从命令行预编译网站,我执行以下操作,但是我在Web服务器上执行此操作,而不是在上传之前执行此操作:

 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -p "D:\<mycompany>\Backedup\Web Sites\<mysite\Root" -v / 

我一直在使用msbuild正是你所描述的。 你有没有尝试设置这样的属性?

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

如果它仍然无法正常工作,请告诉我,我可以将您的bat文件发送给您,msbuild脚本的踢脚,svn脚本,构buildassembly.info文件,部署网站,最后运行http get在网站主页上,只是为了确保它的构build和正确部署。

希望对Rihan有帮助

我挣扎着同样的错误(MSB4057:目标“_CopyWebApplication”不存在于项目中。

是。 我正在使用一个Web应用程序项目(而不是一个网站)。

我感到困惑,因为我有一个项目工作,一个没有。 所以我坐下了ExamDiffPro,去比较项目文件。 我发现的是,构build目标包含在项目文件底部的部分是不同的。

一个项目(正在工作)是使用新版本的Visual Studio创build的。 另一个(那是不工作的)是几年前创build的,并且已经升级了多年,直到我正在使用的当前版本。 升级后的项目显然没有随着新版Visual Studio的推出而升级。

在正在工作的项目文件的底部,我发现了以下内容:

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

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

第二条import线不在造成问题的项目中。

我只是从工作文件复制导入,并将其粘贴在非工作文件的相对位置,中提琴!

虽然这不是直接解决在这个线程中定义的初始问题,但我希望这可以帮助其他一些偶然发现这个线程的人,寻找类似的问题,只有实际的Web应用程序项目。

这里有一个小小的PowerShell脚本来构build一个解决scheme,然后从中发布一个Web项目。

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”之前,否则依赖关系就会丢失。

这里给出的示例path构build为:

  • C:\项目\ AdminWebSite \ AdminWebSite.sln
  • C:\项目\ AdminWebSite \ Admin.Web \ Admin.Web.csproj

您收到的错误(C:\ dev \ T&A \ TAWeb.sln:错误MSB4057:目标“_CopyWebApplication”在项目中不存在)是由于两个问题。 首先:必须在WebApplication项目文件上调用目标_CopyWebApplication,而不是解决scheme。 第二:一个网站没有项目文件,WebApplications有项目文件。

_CopyWebApplication目标仅适用于发布WebApplication项目。 使用AspNetCompiler MSBuild任务必须用来发布一个网站。

当您在Visual Studio 2008中发布网站时,第二行输出是“预编译网站”。 visual studio显示的选项直接发布网站地图到AspNetCompiler和Aspnet_compiler.exe的选项。

尽pipe我不是第一个说“使用AspNet_compiler”的人,但我想到了描述为什么可能有用的原因。 在旁注中,我认为AspNet_compiler可以用来发布一个webapp,但是我需要做更多的testing。

我使用蝙蝠文件使用msbuild.exe(.net 3.5,vs 2008)“发布”我的网站(vbproj)在一个文件夹中。

%msBuildDir%\ msbuild“D:\ Project1 \ Client \ WebPresentation \ ConsultaOperaciones.vbproj”/ t:ResolveReferences; Rebuild / p:BuildingProject = true; OutDir = D:\ Instalaciones \ ultima \ PublicacionWeb \ OutDir \; WebProjectOutputDir = D: \ INSTALACIONES \最美\ PublicacionWeb \ WebProjectDir \

没有什么关于“发布…”function的神奇function,您无法自行重新创build,特别是因为您的目标是networking文件共享。

在核心上,它所做的就是将文件从一个地方复制到另一个地方。 使用NAnt,您可以使用复制任务来解决这个问题,或者您可以使用exec任务来调用xcopy。如果您使用的不是NAnt的构build工具,我相信也支持类似的任务。

如果您想保留原始代码和debugging信息,则可以排除以.cs或.pdb结尾的文件。 NAnt copy和xcopy都提供了简单的方法来执行此操作。