我想创建一个执行某些操作的脚本,然后将该站点发布到生产环境,然后在Visual Studio 2010中运行另一个脚本。
答案 0 :(得分:4)
当然有可能。我需要你MSBuild。它已经有lot default tasks复制,删除等。此外,MSBuild有很多第三方任务,如SDCTasks或Community Tasks
例如,这里是部署网站的各种方法之一(使用SDCTasks)。在此示例中,将构建网站解决方案和Web服务解决方案,如果成功,它们将发布到某个远程服务器并使用发行版配置文件进行正确配置。
<Import Project="$(MSBuildExtensionsPath)\SDCTasks\Microsoft.Sdc.CommonWOBizTalk.tasks"/>
...
<ItemGroup>
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../website.sln">
<Targets></Targets>
<Properties></Properties>
</SolutionToBuild>
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../services.sln">
<Targets></Targets>
<Properties></Properties>
</SolutionToBuild>
</ItemGroup>
<PropertyGroup>
<PublishFolder>\\myservername\deployto</PublishFolder>
</PropertyGroup>
<Target Name="AfterCompile" DependsOnTargets="PublishWebSite;PublishServices;SetConfiguration"/>
<Target Name="PublishWebSite">
<Folder.CleanFolder Path="$(PublishFolder)" Force="True" />
<Folder.CopyFolder Source="$(OutDir)_PublishedWebsites\MyWebSite" Destination="$(PublishFolder)" />
</Target>
<Target Name="PublishServices">
<MakeDir Directories="$(PublishFolder)\Services"/>
<Folder.CopyFolder Source="$(OutDir)_PublishedWebsites\MyService" Destination= "$(PublishFolder)\ Services" />
</Target>
<Target Name="SetConfiguration">
<Copy SourceFiles="$(OutDir)_PublishedWebsites\MyWebSite\WebRelease.config" DestinationFiles="$(PublishFolder)\web.config" />
<Copy SourceFiles="$(OutDir)_PublishedWebsites\MyService\WebRelease.config" DestinationFiles="$(PublishFolder)\Services\web.config" />
</Target>
答案 1 :(得分:0)
我认为您所寻找的是macro,它会在调用发布之前执行操作,然后执行一些其他操作。如果您正在使用TFS 2010,那么您可以自定义构建定义以执行您正在寻找的内容。
答案 2 :(得分:0)
涵盖“预发布”部分的最新答案(已在VS2017中进行测试,但我认为这也应在以前的版本中使用):
打开Web发布配置文件(例如Test.pubxml)
定义一个目标,该目标执行位于项目内某个位置的自定义脚本(例如,内部文件夹中的某些Powershell脚本)。此代码应放在第一个Project
之后的PropertyGroup
标记内:
<PropertyGroup>
<PipelineDependsOn>
ExtBuild;
$(PipelineDependsOn);
</PipelineDependsOn>
</PropertyGroup>
<Target Name="ExtBuild">
<Message Text="Building something else" Importance="high"/>
<Exec Command="powershell.exe -file "$(ProjectDir)\Publish\publish.ps1"" />
</Target>
注意:当前目录为$(ProjectDir)
,因此在包含目标目录中的其他ps1文件时要小心
答案 3 :(得分:0)
对于预发布,至少对于 ClickOnce,您可以添加:
<Target Name="ClearPrevPulish" BeforeTargets="PublishOnly">
<RemoveDir Directories="$(PublishUrl)" />
</Target>