Visual Studio 2013 构建并发布
Visual Studio 2013 Build and Publish
我在 VS 2013 中混合了 Web 和 windows 项目。我有一个构建所有项目的解决方案。出于测试目的,我想自动将一些 Web 项目部署到本地文件夹中。我可以手动执行此操作,右键单击菜单并 select 发布...
我创建的发布配置文件看起来像
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>$(MSBuildThisFileDirectory)..\..\bin\PublishFolder\</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
我可以使用 msbuild as
从命令行发布
msbuild C:\work\Source\AppManager\SereverManager.csproj /p:DeployOnBuild=true /p:PublishProfile=Local
这也给了我设计的结果。
我想做的是结合项目构建和发布。这意味着我想在每次构建项目时自动部署。
我尝试设置批处理文件并从 post-build 事件调用 msbuild,但这会导致 VS 冻结,甚至不确定这是否是正确的方法。每次建项目的时候修改我的csproj文件可以发布吗?
是的,这绝对有可能。只需将以下 XML 添加到您的 ServerManager.csproj 文件。
<PropertyGroup>
<DeployOnBuild>true</DeployOnBuild>
<PublishProfile>Local</PublishProfile>
</PropertyGroup>
更新时间:2017-02-13
实际测试此解决方案后,我发现 Yusuf 是正确的,并且仅当我在 MSBuild.exe 调用上显式设置 DeployOnBuild
和 PublishProfile
MSBuild 属性时部署才有效。
>"c:\Program Files (x86)\MSBuild.0\Bin\MSBuild" /p:DeployOnBuild=true /p:PublishProfile=Local
在 .csproj 中设置属性通常没有问题。看来 DeployOnBuild
属性 很特别。不确定这是错误还是故意的,但在项目文件中设置它或引用的目标文件在构建中的某处被覆盖。只有当您通过将其设置为 MSBuild.exe 调用中的标志将其定义为全局 MSBuild 属性 时,它才会受到尊重。
一旦我发现了这一点,我就找到了一个可行的替代解决方案。将属性传递给项目中的第二个 MSBuild 调用:
<Target Name="AfterBuild">
<MSBuild Condition="'$(DeployOnBuild)'!='true'" Projects="$(MSBuildProjectFullPath)" Properties="DeployOnBuild=true;PublishProfile=Local;BuildingInsideVisualStudio=False"/>
</Target>
现在无论您是在 VS 中构建还是从命令行构建,它都会自动部署。
基于@chief7 的回答,我能够在 Visual Studio 2015 年的 MVC 项目中实现这一点,如下所示:
<Target Name="Deploy" AfterTargets="Build">
<MSBuild
Condition="'$(DeployOnBuild)'!='true'"
Projects="$(ProjectPath)"
Targets="WebPublish"
Properties="PublishProfile=$(AutoDeployPublishProfileName)"/>
</Target>
原来的答案是 MSB4006
给我:
There is a circular dependency in the target dependency graph involving target "AfterBuild"
This answer 建议更改目标名称并添加 AfterTargets
属性,如上所示,有效。
对于那些需要根据配置进行部署的人(Debug
、Release
等)——@chief7 有 a great write-up on their website.
我在 VS 2013 中混合了 Web 和 windows 项目。我有一个构建所有项目的解决方案。出于测试目的,我想自动将一些 Web 项目部署到本地文件夹中。我可以手动执行此操作,右键单击菜单并 select 发布...
我创建的发布配置文件看起来像
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>$(MSBuildThisFileDirectory)..\..\bin\PublishFolder\</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
我可以使用 msbuild as
从命令行发布msbuild C:\work\Source\AppManager\SereverManager.csproj /p:DeployOnBuild=true /p:PublishProfile=Local
这也给了我设计的结果。
我想做的是结合项目构建和发布。这意味着我想在每次构建项目时自动部署。
我尝试设置批处理文件并从 post-build 事件调用 msbuild,但这会导致 VS 冻结,甚至不确定这是否是正确的方法。每次建项目的时候修改我的csproj文件可以发布吗?
是的,这绝对有可能。只需将以下 XML 添加到您的 ServerManager.csproj 文件。
<PropertyGroup>
<DeployOnBuild>true</DeployOnBuild>
<PublishProfile>Local</PublishProfile>
</PropertyGroup>
更新时间:2017-02-13
实际测试此解决方案后,我发现 Yusuf 是正确的,并且仅当我在 MSBuild.exe 调用上显式设置 DeployOnBuild
和 PublishProfile
MSBuild 属性时部署才有效。
>"c:\Program Files (x86)\MSBuild.0\Bin\MSBuild" /p:DeployOnBuild=true /p:PublishProfile=Local
在 .csproj 中设置属性通常没有问题。看来 DeployOnBuild
属性 很特别。不确定这是错误还是故意的,但在项目文件中设置它或引用的目标文件在构建中的某处被覆盖。只有当您通过将其设置为 MSBuild.exe 调用中的标志将其定义为全局 MSBuild 属性 时,它才会受到尊重。
一旦我发现了这一点,我就找到了一个可行的替代解决方案。将属性传递给项目中的第二个 MSBuild 调用:
<Target Name="AfterBuild">
<MSBuild Condition="'$(DeployOnBuild)'!='true'" Projects="$(MSBuildProjectFullPath)" Properties="DeployOnBuild=true;PublishProfile=Local;BuildingInsideVisualStudio=False"/>
</Target>
现在无论您是在 VS 中构建还是从命令行构建,它都会自动部署。
基于@chief7 的回答,我能够在 Visual Studio 2015 年的 MVC 项目中实现这一点,如下所示:
<Target Name="Deploy" AfterTargets="Build">
<MSBuild
Condition="'$(DeployOnBuild)'!='true'"
Projects="$(ProjectPath)"
Targets="WebPublish"
Properties="PublishProfile=$(AutoDeployPublishProfileName)"/>
</Target>
原来的答案是 MSB4006
给我:
There is a circular dependency in the target dependency graph involving target "AfterBuild"
This answer 建议更改目标名称并添加 AfterTargets
属性,如上所示,有效。
对于那些需要根据配置进行部署的人(Debug
、Release
等)——@chief7 有 a great write-up on their website.