如何构建.NETMVC和WebAPI项目并将其发布到不同的文件夹中

如何构建.NETMVC和WebAPI项目并将其发布到不同的文件夹中,.net,visual-studio,asp.net-mvc-5,asp.net-web-api2,.net,Visual Studio,Asp.net Mvc 5,Asp.net Web Api2,我有一个包含MVC和WebApi项目的解决方案。我想做的是只需单击一下就可以发布这两个文件。 我希望MVC项目转到根文件夹。\MyApp\,WebApi转到。\MyApp\Api\ 我想我已经看到了这样的解决方案,但我在任何地方都找不到。物理路径将由您的发布方法决定。您可以将发布向导设置为仅指向所需的物理路径。然后,您必须配置IIS以确保两个应用程序可以共存 至于路由,这将由WebAPI的内置路由负责。如果将web服务器配置为在/myapp托管应用程序,并在/myapp/API托管虚拟目录中的A

我有一个包含MVC和WebApi项目的解决方案。我想做的是只需单击一下就可以发布这两个文件。 我希望MVC项目转到根文件夹
。\MyApp\
,WebApi转到
。\MyApp\Api\


我想我已经看到了这样的解决方案,但我在任何地方都找不到。

物理路径将由您的发布方法决定。您可以将发布向导设置为仅指向所需的物理路径。然后,您必须配置IIS以确保两个应用程序可以共存

至于路由,这将由WebAPI的内置路由负责。如果将web服务器配置为在
/myapp
托管应用程序,并在
/myapp/API
托管虚拟目录中的API,则需要更改web API中的路由以消除
API
前缀

config.Routes.MapHttpRoute(
   name: "DefaultApi",
   routeTemplate: "api/{controller}/{id}", //remove "api/"
   defaults: new { id = RouteParameter.Optional }
);
这将告诉Web API将其所有路由挂起
/
而不是
/API
,因为
/API
现在是应用程序的根所在地,并且该路径将来自IIS


要进一步回答这些问题,请指定发布的方法。

通过创建宏,可以在一个解决方案中发布多个项目。这方面的一个例子是

公共模块发布所有项目
子出版物ProjectsInSolution()
'使用此宏之前,必须设置证书和安全区域。
'可以通过使用VS IDE发布项目来实现这一点。
作为SolutionBuild2的尺寸slnbld2=CType(DTE.Solution.SolutionBuild,SolutionBuild2)
'保存对所有项目的更改并清除。
对于DTE.Solution.Projects中的每个项目作为项目
项目保存()
下一个
slnbld2.干净(真实)
对于DTE.Solution.Projects中的每个项目作为项目
'继续之前,请验证项目是否为windows应用程序或控制台应用程序
Dim outputType As Integer=proj.Properties.Item(“outputType”).Value
如果输出类型为0,也输出类型为1,则
继续
如果结束
'GenerateManifests和SignManifests必须始终为true才能发布。
项目属性项(“GenerateManifests”)。值=真
proj.Properties.Item(“SignManifests”).Value=True
项目保存()
slnbld2.BuildProject(proj.ConfigurationManager.ActiveConfiguration.ConfigurationName,proj.UniqueName,True)
'仅在生成成功时发布。
如果slnbld2.LastBuildInfo为0,则
MsgBox(“为项目UniqueName生成失败”)
其他的
slnbld2.PublishProject(proj.ConfigurationManager.ActiveConfiguration.ConfigurationName,proj.UniqueName,True)
如果slnbld2.LastPublishInfo=0,则
MsgBox(“发布成功”&proj.UniqueName)
其他的
MsgBox(“发布失败”&proj.UniqueName)
如果结束
如果结束
下一个
端接头
端模块

单词“publish”表示物理路径,但正斜杠(/)表示路由。我们在说什么?还是两者都有?我想两者都有。我希望mvc位于根文件夹中,Api位于
Api
文件夹中,这样我就可以将Api文件夹设置为IIS中的虚拟目录,并在url中使用它。我不是在询问路由或IIS。我想同时发布两个项目。Api文件夹应转到子文件夹。我使用简单VS发布
Public Module PublishAllProjects
Sub PublishAllProjectsInSolution()
    ' Before using this macro, the certficate and security zone must be set.
    ' You can do this by publishing the projects using the VS IDE.
    Dim slnbld2 As SolutionBuild2 = CType(DTE.Solution.SolutionBuild, SolutionBuild2)

    'Save changes to all projects and clean.
    For Each proj As Project In DTE.Solution.Projects
        proj.Save()
    Next
    slnbld2.Clean(True)

    For Each proj As Project In DTE.Solution.Projects
        'Verify project is a windows application or console application before continuing
        Dim outputType As Integer = proj.Properties.Item("OutputType").Value
        If outputType <> 0 AndAlso outputType <> 1 Then
            Continue For
        End If

        'GenerateManifests and SignManifests must always to true for publishing to work. 
        proj.Properties.Item("GenerateManifests").Value = True
        proj.Properties.Item("SignManifests").Value = True
        proj.Save()

        slnbld2.BuildProject(proj.ConfigurationManager.ActiveConfiguration.ConfigurationName, proj.UniqueName, True)

        'only publish if build was successful.
        If slnbld2.LastBuildInfo <> 0 Then
            MsgBox("Build failed for " & proj.UniqueName)
        Else
            slnbld2.PublishProject(proj.ConfigurationManager.ActiveConfiguration.ConfigurationName, proj.UniqueName, True)
            If slnbld2.LastPublishInfo = 0 Then
                MsgBox("Publish succeeded for " & proj.UniqueName)
            Else
                MsgBox("Publish failed for " & proj.UniqueName)
            End If
        End If
    Next

    End Sub
End Module