45

伙计们,

简而言之,我想复制这个对话框: 替代文字

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

我想在命令行上复制它,以便我可以将它用于 QA 环境构建。

我已经看过各种关于如何在远程部署的命令行上执行此操作的文章,但我只想为文件系统部署执行此操作。

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

我对此进行了更多调查,并找到了这些链接,但没有一个可以干净地解决它:

提前致谢!

4

6 回答 6

46

Ok, finally figured this out.

The command line you need is:

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

You can change where the project outputs to by adding a property of outdir=c:\wherever\ in the /p: section.

This will create the output at:

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

You can then copy those files from the above directory using whatever method you'd like.

I've got this all working as a ruby rake task using Albacore. I am trying to get it all done so I can actually put it as a contribution to the project. But if anyone wants the code before that, let me know.

Another wrinkle I found was that it was putting in Tokenized Parameters into the Web.config. If you don't need that feature, make sure you add:

/p:AutoParameterizationWebConfigConnectionStrings=false
于 2010-10-28T13:27:17.753 回答
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项目

于 2011-12-20T11:17:04.570 回答
1

在 VS2012 及更高版本上,您可以使用 msbuild 12.0 引用项目中现有的发布配置文件,这相当于右键单击并发布...选择发布配置文件(本例中为“MyProfile”):

msbuild C:\myproject\myproject.csproj "/P:DeployOnBuild=True;PublishProfile=MyProfile"
于 2014-09-26T19:58:52.230 回答
1

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

<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>
于 2013-05-08T08:36:53.650 回答
0

我有 Visual Studio 2012 的解决方案:https ://stackoverflow.com/a/15387814/2164198

但是,它可以在根本没有安装 Visual Studio 的情况下工作!(见更新)。我还没有检查是否可以从 Visual Studio Express 2012 中获得所有需要的东西以进行 Web 安装。

于 2013-03-15T05:28:07.873 回答
-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 文件夹中

于 2012-09-12T11:31:31.230 回答