2017-01-03 26 views
2

MVCプロジェクトとWebApiプロジェクトを含むソリューションがあります。私がしたいことは、ワンクリックで両方を公開することです。 MVCプロジェクトをルートフォルダ..\MyApp\に、WebApiを..\MyApp\Api\に移動します。.NET MVCとWeb APIプロジェクトをビルドして別のフォルダに公開する方法

私はこのような解決策を見たと思いますが、どこからもそれを見つけることはできません。

+0

単語「公開」である物理パスが、スラッシュ(/)のルートを意味することを意味します。私たちは何について話しているのですか?それとも両方ですか? – kettch

+0

私はその両方を想定しています。私はmvcを 'api'フォルダにあるようにルートフォルダとApiに入れたいので、IISの仮想ディレクトリとしてApiフォルダを設定し、URLで使うことができます。 –

答えて

1

物理パスは、公開方法によって決定されます。パブリッシングウィザードを設定して、必要な物理パスを指すようにすることができます。次に、両方のアプリケーションが共存できるようにIISを構成する必要があります。

これまでのルーティングでは、Web APIの組み込みルーティングによって処理されます。 /myappにアプリケーションをホストするようにWebサーバーを設定し、仮想ディレクトリにAPIを/myapp/apiに設定する場合は、接頭辞apiを削除するようにWeb APIのルーティングを変更する必要があります。

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", //remove "api/" 
    defaults: new { id = RouteParameter.Optional } 
); 

これは、アプリケーションのルートがホストされている、そしてそのパスがIISから来るどこ/apiが今あるので、代わりに/api/のオフ、それのすべてのルートをハングアップするためのWeb APIを教えてくれます。

質問にさらに回答するには、公開する方法を指定してください。

+0

ルーティングやIISについて質問していません。私はすぐに2つのプロジェクトを公開したいと思います。 Apiフォルダはサブフォルダに移動する必要があります。私は単純なVSを使用して公開 –

0

マクロを作成することで、複数のプロジェクトを1つのソリューションで公開することができます。この例はMSDN

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 
関連する問題