2015-11-04 116 views
0

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

我发现这个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> 

回答

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

相关问题