MSBuild:指定解决方案时构建自定义项目目标

时间:2015-11-04 15:53:40

标签: msbuild msbuild-task msbuild-target

我需要使用MSBuild构建解决方案级别,因为我有多个配置。我的Web项目中有一个自定义目标,用于发布输出。我可以将Web项目指定为目标,并且构建正常。但我需要发布Web应用程序。在解决方案级别构建时,有没有办法构建项目的自定义目标?

我发现了这个link,但我不明白解决方案。如果有人能够将其打破一点,那将会有很大的帮助。

这是我当前的PowerShell命令行:

& "$env:windir\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" `
    "..\..\Solution.sln" `
    "/t:WebApplication:PublishToFileSystem" `
    "/p:Configuration=$configuration;PublishDestination=$publishPath"

:PublishToFileSystem导致它失败,并显示以下消息:

error MSB4057: The target "PublishToFileSystem" does not exist in the project. [C:\Source\Solution.sln]

这是我的.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 个答案:

答案 0 :(得分:0)

因此,经过一些研究,我发现创建自定义目标并不是发布Web应用程序的最佳方式。假设您的解决方案中只有一个Web项目,MS扩展MSBuild以使用发布配置文件(与在Visual Studio中发布时使用的相同)。我能够为每个配置(环境)创建单独的发布配置文件,并调用以下命令行:

& "$env:windir\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" `
    "..\..\Solution.sln" `
    "/p:DeployOnBuild=true" `
    "/p:PublishProfile=$configuration"

我必须确保我的发布配置文件与我的$configuration具有相同的名称。

publish profiles