VS2010 Web发布命令行版本的文件系统部署

45

各位,

简而言之,我想复制这个对话框: alt text

这是一个Visual Studio 2010 ASP.Net MVC项目。如果我执行这个命令,我会获得所有我想要的文件,包括转换后的web.config在"C:\ToDeploy"目录中。

我想在命令行上复制它,这样我就可以用它来构建QA环境。

我已经看到了各种关于如何在远程部署的命令行上进行此操作的文章,但我只想将其用于FileSystem部署。

我知道我可以使用nAnt任务或rake脚本来复制此功能,但我想使用这种机制来完成,这样我就不会重复自己。

我进一步调查了一下,我找到了这些链接,但没有一个干净地解决问题:

提前感谢!

6个回答

46

好的,终于弄清楚了。

你需要使用的命令行是:

msbuild path/to/your/webdirectory/YourWeb.csproj /p:Configuration=Debug;DeployOnBuild=True;PackageAsSingleFile=False

您可以通过在/p:部分中添加outdir=c:\wherever\属性来更改项目输出的位置。

这将在以下位置创建输出:

path/to/your/webdirectory/obj/Debug/Package/PackageTmp/

您可以使用任何方法从上述目录中复制这些文件。

我已经将其作为ruby rake任务使用Albacore,并使其正常工作。 我正在尝试将其作为贡献放入项目中。但如果有人需要在此之前获取代码,请告诉我。

另一个问题是它会将标记化的参数放入Web.config中。如果您不需要该功能,请确保添加:

/p:AutoParameterizationWebConfigConnectionStrings=false

不幸的是,这将复制整个包。我认为你需要使用MS Web Deploy仅复制更改的文件。 - jrummell
5
为了完整性,OutDir属性必须以斜杠结尾(否则MSBuild会出错)。因此,您的建议应为outdir=c:\wherever\ - Jakub Januszkiewicz
另外,你可以使用Package目标代替/p:DeployOnBuild=True。这对我很有效,而且PackageAsSingleFileAutoParameterizationWebConfigConnectionStrings参数也会被尊重。 - Jakub Januszkiewicz
@Jakub,我更新了答案以反映OutDir评论,谢谢! - CubanX

11
我想发布另一个我找到的解决方案,我更新了这个解决方案以包括日志文件。这与通过命令行发布Web应用程序类似,但只是进行了清理并添加了日志文件。还可以查看原始来源http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild
在您的Web应用程序项目的根目录中创建一个MSBuild_publish_site.bat(无论如何命名)
set msBuildDir=%WINDIR%\Microsoft.NET\Framework\v4.0.30319
set destPath=C:\Publish\MyWebBasedApp\

:: clear existing publish folder
RD /S /Q "%destPath%"

call %msBuildDir%\msbuild.exe  MyWebBasedApp.csproj "/p:Configuration=Debug;PublishDestination=%destPath%;AutoParameterizationWebConfigConnectionStrings=False" /t:PublishToFileSystem /l:FileLogger,Microsoft.Build.Engine;logfile=Manual_MSBuild_Publish_LOG.log

set msBuildDir=
set destPath=

请在<Import Project=标签下方添加以下xml代码,更新您的Web应用程序项目文件MyWebBasedApp.csproj

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder">
<Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." />
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" />

    <ItemGroup>
        <PublishFiles Include="$(_PackageTempDir)\**\*.*" />
    </ItemGroup>

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" />
</Target>

这对我比其他解决方案更有效。
查看以下内容以获取更多信息:
1) http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild 2) 从命令行发布Web应用程序 3) 通过命令行构建Visual Studio项目

1

我针对CCNET使用Web.config转换的解决方案:

<tasks>
    <msbuild>
        <executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe</executable>
        <workingDirectory>E:\VersionesCC\Trunk_4\SBatz\Gertakariak_Orokorrak\GertakariakMS\Web</workingDirectory>
        <projectFile>GertakariakMSWeb2.vbproj</projectFile>
        <targets>Build</targets>
        <timeout>600</timeout>
        <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll</logger>
        <buildArgs>
            /noconsolelogger /p:Configuration=Release /v:diag
            /p:DeployOnBuild=true
            /p:AutoParameterizationWebConfigConnectionStrings=false
            /p:DeployTarget=Package
            /p:_PackageTempDir=E:\Aplicaciones\GertakariakMS2\Web
        </buildArgs>
        </msbuild>
</tasks>

1
在VS2012及以上版本中,您可以使用msbuild 12.0引用现有的项目发布配置文件,这相当于右键单击并发布...选择一个发布配置文件(例如此示例中的“MyProfile”):
msbuild C:\myproject\myproject.csproj "/P:DeployOnBuild=True;PublishProfile=MyProfile"

0

我有一个适用于Visual Studio 2012的解决方案:https://dev59.com/_HA75IYBdhLWcg3wy8br#15387814

然而,它可以在没有安装Visual Studio的情况下工作!(请参见更新)。 我还没有检查过是否可以从Visual Studio Express 2012 for Web安装中获取所有所需的东西。


-1
一个完整的msbuild文件,灵感来自CubanX。
    <Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Publish">
        <RemoveDir Directories="..\build\Release\Web\"
                     ContinueOnError="true" />        
       <MSBuild Projects="TheWebSite.csproj"
                Targets="ResolveReferences;_CopyWebApplication"
                Properties="Configuration=Release;WebProjectOutputDir=..\build\Release\Web;OutDir=..\build\Release\Web\bin\"
        />  
    </Target>
    <Target
        Name="Build"
        DependsOnTargets="Publish;">
    </Target>   
</Project>

这将把发布的网站放置在 Web..\build\Release 文件夹中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接