Visual Studio 2010:如何使用MSBUILD将ASP.NET Web应用程序发布到目标文件夹?

时间:2011-04-16 01:50:42

标签: visual-studio-2010 msbuild publish

在Visual Studio 2010中,您知道如何更改配置(调试,发布等),右键单击解决方案资源管理器中的项目,单击“发布”,并获取所选配置的所有重要Web应用程序项目文件复制到目标文件夹以及xdt转换的web.config?好吧,我正在寻找与之完全相同的MSBUILD。

我向你提出的挑战:在我的命令提示符下提供我需要执行的ONE LINE以完成此操作。没有第三方计划。没有教程视频。只需一个直接命令,我可以从您的响应中逐字复制,粘贴到命令窗口,根据需要进行修改以支持我的目录结构,然后按Enter键。

如果没有,那么也许有人可以提供一个完整的MSBUILD参考链接,显示我可以在命令行使用的每个命令,开关和值。

2 个答案:

答案 0 :(得分:6)

将以下内容放入ProjectPublish.MSBuild.xml文件(根据需要更改PropertyGroup):

<?xml version="1.0" encoding="utf-8" ?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Publish"> 
    <PropertyGroup>
        <ProjectFile>Path\To\Web.csproj</ProjectFile>
        <PublishDir>Path\For\Publish\Output</PublishDir>
        <TempDir>Path\To\Temp\Folder</TempDir>
        <BuildConfig>Release|Debug</BuildConfig>
    </PropertyGroup>

    <Target Name="Publish">
        <MSBuild Projects="$(ProjectFile)"
                 Properties="Configuration=$(BuildConfig);WebProjectOutputDir=$(PublishDir);OutDir=$(TempDir)\;BuildingProject=true"
                 Targets="ResolveReferences;_CopyWebApplication" />
    </Target>
</Project>

从命令行(或.bat文件)调用此方法应该可以解决这个问题:

%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ProjectPublish.MSBuild.xml

答案 1 :(得分:0)

在这几个月之后我找到了我正在寻找的解决方案here

如果上面的链接变坏了,这就是它所说的内容:

卸载然后编辑项目文件。查找导入Microsoft.WebApplication.targets的行。看起来像:

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

在该行下方,粘贴此XML:

<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>

现在,在与项目文件相同的文件夹中的命令提示符下运行它:

msbuild TestWebApp.csproj "/p:Platform=AnyCPU;Configuration=Debug;PublishDestination=C:\pub" /t:PublishToFileSystem

请记住在命令中指定MSBUILD的路径或添加全局路径环境变量的路径(这就是我所做的)。在我的机器上,它在这里:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

为了测试这个,我在我的Web.Release.config中添加了一个配置转换来添加一个AppSetting键(如果你这样做,请确保你的基本配置文件中存在AppSettings节点,否则你会收到错误)。当我使用上面的命令来构建调试配置时,密钥不会按预期存在于已发布的配置文件中。但是,当我使用发布配置时,密钥已成功添加到文件中。

我真的希望微软没有混淆这一点。无论如何,这是我在互联网上找到的最简单的解决方案。我希望它对你们其他人有所帮助。