Visual studio 2010 以编程方式发布web应用程序
我正在尝试编写一个VisualStudio扩展,它允许我在一个解决方案中发布多个web应用程序,类似于在所有项目上使用一键发布功能Visual studio 2010 以编程方式发布web应用程序,visual-studio-2010,vsx,envdte,Visual Studio 2010,Vsx,Envdte,我正在尝试编写一个VisualStudio扩展,它允许我在一个解决方案中发布多个web应用程序,类似于在所有项目上使用一键发布功能 DTE2 service = (DTE2)this.GetService(typeof(DTE)); Projects projects = service.Solution.Projects; SolutionBuild2 build = (SolutionBuild2)service.Solution.SolutionBuild; foreach (Proje
DTE2 service = (DTE2)this.GetService(typeof(DTE));
Projects projects = service.Solution.Projects;
SolutionBuild2 build = (SolutionBuild2)service.Solution.SolutionBuild;
foreach (Project project in projects)
{
build.PublishProject("Release", project.UniqueName, true);
}
当我尝试运行此代码时,输出窗口中的唯一结果是:
Error: Object reference not set to an instance of an object.
========== Publish: 0 succeeded, 0 failed, 0 skipped ==========
。。。这并不能告诉我太多。有没有办法找出哪里出了问题
我也看到了一个界面,但似乎没有任何关于如何使用它的例子
是否有另一种方式以编程方式将web应用程序发布到特定目录,类似于一键发布功能的工作方式?另一种方式是模拟在解决方案资源管理器中单击右键单击“发布”上下文菜单项,如此类似问题所示:
请注意,由于这是一个异步命令,您将需要内置逻辑以点击发布后事件来迭代您的项目集合(其中一个答案中显示了有关这一点的详细信息)。使用msbuild.exe可执行文件(这就是您构建的方式),将sln文件作为项目参数传递,并以“发布”目标为目标 您可以在命令行中声明某些属性,也可以使用自己的.targets文件静态声明它们;在.csproj中引用此.targets文件
<Import Project="MyPublishCustomizations.targets" />
.targets文件的内容可能如下所示:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Publish">
</Target>
<!-- or .. -->
<Target Name="CustomPublish" BeforeTargets="Publish">
</Target>
</Project>
msbuild.exe "MyProject.csproj" /p:PublishProfile="MyPublishProfile.pubxml" /p:DeployOnBuild=true /p:VisualStudioVersion="14.0"
。。然后,
XML就可以包含在其中
<PropertyGroup>
<MyCustomPath>\\our_server\our_share</MyCustomPath>
</PropertyGroup>
<Copy SourceFiles="$(OutDir)\*" DestinationFiles="$(MyCustomPath)" />
\\我们的\u服务器\u共享
然后,您可以使用
定义任何其他MSBuild任务,甚至shell命令
在MSBuild上更一般的情况如下:
此外,如果您坚持在C语言中编写发布逻辑,则可以考虑上面描述的路径并定义自定义MSBuw任务,即
了解方法。基本上,它归结为以某种方式调用msbuild,如下所示:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Publish">
</Target>
<!-- or .. -->
<Target Name="CustomPublish" BeforeTargets="Publish">
</Target>
</Project>
msbuild.exe "MyProject.csproj" /p:PublishProfile="MyPublishProfile.pubxml" /p:DeployOnBuild=true /p:VisualStudioVersion="14.0"
我已经为此编写了PowerShell cmdlet,我可以从NuGet package manager控制台调用它。如果您告诉我们哪一行引发异常,可能会有所帮助。您是否尝试使用调试器单步执行?它不会引发异常。当我尝试在实验性VisualStudio中使用扩展时,它只是将错误消息写入输出窗口。我可以成功地一步一步地浏览所有行,而不会引发任何异常。当你一步一步地浏览时,它是否真的发布了任何项目?不,它没有。实验性Visual Studio中的输出窗口包含错误消息,并且尚未发布任何项目。请举例说明如何使用指定的cmdlet从C#以编程方式运行此命令?@Jacob如前所述,我创建该cmdlet用于从控制台调用msbuild。如果要从C#调用msbuild,它可能类似于
Process.Start(“msbuild.exe”、“MyProject.csproj/p:PublishProfile=…”