我试图在发布事件后调用简单的任务.当我说"发布"时,我的意思是在Visual Studio中发布,右键单击项目并按"发布...".我在项目文件中包含了(导入的)目标文件,因为我已经在Build事件上测试了它,所以工作正常.我在http://msdn.microsoft.com/en-us/library/ms366724.aspx上发现有AfterPublish事件应该做我需要的事情,但事实并非如此.我不确定这是否应该在Visual Studio中的Publish上触发,有人请澄清这一点.我的问题是如何在Visual Studio中的Publish上触发目标文件中的任何类型的任务?
我在目标文件中尝试了这个:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="AfterPublish">
<Message Label="Test"></Message>
<Warning Label="Test"></Warning>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
我正在使用Visual Studio 2010.
编辑:
我实际上正在寻找在Visual Studio中的Publish上执行某些操作的任何方法.我还在考虑添加Build Events,但我不知道如何确定它是否正在发布.
编辑:@Alexey Shcherbak感谢您的快速回复.我在我的MSBuild输出中得到这个:
12/10/2012 12:29:40 AM: Done executing task "CallTarget".
12/10/2012 12:29:40 AM: Done building target "PipelinePreDeployCopyAllFilesToOneFolder" in project "PublishTestApp.csproj".
12/10/2012 12:29:40 AM:Done building project "PublishTestApp.csproj".
Deleting existing files...
Publishing folder /...
Publishing folder Account...
Publishing folder bin...
Publishing folder Scripts...
Publishing folder Styles...
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
========== Publish: …
Run Code Online (Sandbox Code Playgroud) 我想知道如何从PowerShell以与Visual Studio相同的方式发布.
例如,当您使用MVC项目启动Visual Studio时; 然后右键单击项目并选择"发布"; 出现一个对话框,您可以在再次单击"发布"中填写一些设置.它按预期神奇地推动您的网站.它还会创建一个文件来保存这些设置.projectName.Publish.xml.
该文件是我希望能够以完全相同的方式使用它的原因.有一些设置可以在powershell中进行操作,将应用程序推送到具有不同配置的多个站点.
我查看了"msbuild target:publish",它只生成(从包含.csproj的目录运行):
MSBUILD : error MSB1009: Project file does not exist.
Switch: target:publish
Run Code Online (Sandbox Code Playgroud)
我试过"msbuild projectfile target:publish",它产生:
MSBUILD : error MSB1008: Only one project can be specified.
Switch: target:build
Run Code Online (Sandbox Code Playgroud)
我还看了几个msdeploy变种.这不可能这么难!?如果您可以在工作室中右键单击,则可以执行该任务.
我开始怀疑这是否需要满月并将鸡头切掉.(我花了很多时间在这上面!)
**编辑:我试过李的建议:
msbuild target:publish Mvc.csproj
Run Code Online (Sandbox Code Playgroud)
哪会产生这个错误:
MSBUILD : error MSB1008: Only one project can be specified.
Switch: Mvc.csproj
For switch syntax, type "MSBuild /help"
Run Code Online (Sandbox Code Playgroud)
**编辑:根据DaveE的建议,我试过:
msbuild target:publish Mvc.csproj
Run Code Online (Sandbox Code Playgroud)
哪会产生这个错误:
MSBUILD : error MSB1009: Project file does not exist.
Switch: target:publish=PassportHealth.PatientSimple.Mvc.csproj
Run Code Online (Sandbox Code Playgroud)
我还回到了"发布"目标(http://msdn.microsoft.com/en-us/library/ms165431.aspx)的文档,这似乎很清楚,语法是:
msbuild …
Run Code Online (Sandbox Code Playgroud) msbuild powershell visual-studio-2010 msdeploy visual-studio
从VS2010 RTM部署Web应用程序项目会导致MSBuild中出错.它抱怨无法找到PipelinePreDeployCopyAllFilesToOneFolder目标.
有没有办法进一步诊断这个?
谢谢.
假设我有三个目标A,B和C.C依赖于B.B依赖于A.如果我运行msbuild /t:C mybuildfile.xml
,它将按顺序执行目标A,B和C. 如果A中出现任何故障,如何设置以确保C和B不会被执行?
我正在尝试创建发布配置文件,它将所有发布的文件复制到各个文件夹。不幸的是,我读到这是不可能直接通过publishUrl
的,建议发布到一个文件夹,从中复制所有文件。我设法编写了复制目标功能,但是目标运行的顺序是错误的。我正在尝试通过 Build > Publish Web 直接从 VisualStudio 2015 运行发布。
这是我的发布配置文件:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>False</LaunchSiteAfterPublish>
<ExcludeApp_Data>True</ExcludeApp_Data>
<publishUrl>obj\Package\PackageTemp</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
<ExcludeFilesFromDeployment>Web.config;package.json;packages.config;Typescript\**;DynamicCss\**;gulpfile.js;</ExcludeFilesFromDeployment>
</PropertyGroup>
<Import Project="AdditionalResources.targets" />
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>AdditionalResources</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<ItemGroup>
<DestLocations Include="D:\PUBLISH_TEST\" />
<DestLocations Include="D:\PUBLISH_TEST2\" />
</ItemGroup>
<Target Name="CopyToDeployFolders" AfterTargets="CopyAllFilesToSingleFolderForPackage" Outputs="%(DestLocations.Identity)">
<ItemGroup>
<PublishedFiles Include="obj\Package\PackageTemp\**\*" />
</ItemGroup>
<Message Importance="high" Text="FilesToCopy: @(PublishedFiles)" />
<PropertyGroup>
<_DeployPathIdentity>%(DestLocations.Identity)</_DeployPathIdentity>
</PropertyGroup>
<Copy SourceFiles="@(PublishedFiles)" DestinationFiles="@(PublishedFiles->'$(_DeployPathIdentity)%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
它的运行顺序如下:
Build
AdditionalResources
CopyToDeployFolders
Publish folder
Run Code Online (Sandbox Code Playgroud)
这是有问题的,因为我的临时文件夹尚未创建/发布。我试图让我的 CopyToDeployFolders 目标覆盖 AfterPublish 并尝试使用各种不同的 AfterTarget,但它们都不起作用 - 有时我的目标没有执行或在发布文件夹之前仍在运行。
我试图通过查看 …