首页 文章

MSBuild项目使用config转换部署到本地文件夹

提问于
浏览
3

我无法找到正确的方法来使用MSBuild构建Web项目并仅使用可部署的文件(即没有.cs,.csproj,.Debug.config等)输出项目,但是发布到本地文件夹然后,我可以FTP,RoboCopy,(或其他)到辅助位置 .

已发布的输出必须按照指定的配置预先转换Web.config文件,并且转换配置文件(例如Web.Debug.config)不包含在输出中 . 我不需要任何花哨的发布到IIS,数据库部署或类似的东西,我只是想要干净的文件系统输出,然后我可以测试 . 请注意,使用可视化工具无法完成此操作,因为我希望将其作为自动构建过程的一部分运行 .

我可以生成一个Web部署包,但我似乎不再处理引用的命令行选项(似乎是某种错误)并且目录结构有空格,所以我希望使用MSBuild完成整个任务,看到因为MSBuild似乎具有转换配置文件( TransformXml )的本机容量,这是我正在使用的唯一正确的部署功能 .

1 回答

  • 1

    终于搞清楚了 . 以下构建脚本可以解决这个问题:

    <?xml version="1.0"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
        <PropertyGroup>
            <OutputDir>obj\website-output</OutputDir>
        </PropertyGroup>
        <Target Name="PrepareDeploy">
            <ItemGroup>
                <DeployableFiles Include="App_Code/**/*.*;App_Data/**/*.*;Areas/**/Views/**/*.*;bin/**/*.*;Views/**/*.*;*.aspx;*.asax;*.html;*.htm;sitemap.xml;*.ico;*.png" Exclude="App_Data/**/*.log" />
            </ItemGroup>
            <RemoveDir ContinueOnError="true" Directories="$(OutputDir)" />
            <MSBuild Projects="Website.csproj" />
            <MakeDir ContinueOnError="true" Directories="$(OutputDir)" />
            <Copy SourceFiles="@(DeployableFiles)" DestinationFiles="@(DeployableFiles->'$(OutputDir)\%(RelativeDir)%(Filename)%(Extension)')" />
            <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="$(OutputDir)\web.config" />
        </Target>
    </Project>
    

相关问题