MSBuild:指定解决方案时构建自定义项目目标
MSBuild: Build Custom Project Target When Solution Specified
我需要使用 MSBuild 在解决方案级别构建,因为我有多个配置。我的 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>
因此,经过一些研究,我发现创建自定义目标并不是发布 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
的名称相同。
我需要使用 MSBuild 在解决方案级别构建,因为我有多个配置。我的 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>
因此,经过一些研究,我发现创建自定义目标并不是发布 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
的名称相同。