我有一个包含许多项目的解决方案,其中一些项目的输出类型为exe。
我正在使用以下参数作为我的MsBuild调用的一部分
/target:publish /p:PublishDir="$(build.artifactstagingdirectory)\
但是,这将发布Outputtype为exe的所有项目。但是,我只想发布一个特定的项目。
我所阅读的大部分内容都指出了引用名为PublishProfile
的内容。但是,我没有看到为此项目类型创建PublishProfile
的方法。当我单击发布时,我得到一个基本的发布向导,发布设置存储在.csproj
文件而不是.pubxml
文件中。那么我该如何申请发布特定项目呢?
答案 0 :(得分:0)
但是,我没有看到为此项目类型创建PublishProfile的方法。当我单击发布时,我得到一个基本的发布向导,发布设置存储在.csproj文件中,而不是.pubxml文件中。那么我该如何申请发布特定项目呢?
PublishProfile
用于Web项目而不是单击一次。正如您所说,“基本发布向导和发布设置存储在.csproj文件中而不是.pubxml文件”,因此PublishProfile
不应该是正确的选项。
如果您想使用msbuild从解决方案发布特定项目,那么简单的方法是构建整个解决方案,但只发布一个项目文件,如:
msbuild.exe "ProjectName.csproj" /target:publish /p:PublishDir="$(build.artifactstagingdirectory)\
如果使用一个命令行来构建和发布是您的持久性,则可以自定义目标以在要发布的项目文件中发布项目。 For example:
<PropertyGroup>
<!-- the folder of the project to build -->
<ProjLocation>..\YourProjectFolder</ProjLocation>
<ProjLocationReleaseDir>$(ProjLocation)\bin\Release</ProjLocationReleaseDir>
<ProjPublishLocation>$(ProjLocationReleaseDir)\app.publish</ProjPublishLocation>
<!-- This is the web-folder, which provides the artefacts for click-once. After this
build the project is actually deployed on the server -->
<DeploymentFolder>D:\server\releases\</DeploymentFolder>
</PropertyGroup>
<Target Name="Publish" DependsOnTargets="Clean">
<Message Text="Publish-Build started for build no $(ApplicationRevision)" />
<MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Publish"/>
<ItemGroup>
<SchoolPlannerSetupFiles Include="$(ProjPublishLocation)\*.*"/>
<SchoolPlannerUpdateFiles Include="$(ProjPublishLocation)\Application Files\**\*.*"/>
</ItemGroup>
<Copy
SourceFiles="@(SchoolPlannerSetupFiles)"
DestinationFolder="$(DeploymentFolder)\"
/>
<Copy
SourceFiles="@(SchoolPlannerUpdateFiles)"
DestinationFolder="$(DeploymentFolder)\Application Files\%(RecursiveDir)"
/>
<CallTarget Targets="RestoreLog"/>
</Target>
<Target Name="Clean">
<Message Text="Clean project:" />
<MSBuild Projects="$(ProjLocation)/YourProject.csproj" Properties="Configuration=Release" Targets="Clean"/>
</Target>
使用此自定义目标,您无需发布项目,只需构建解决方案。
希望这有帮助。