MVCプロジェクトとWebApiプロジェクトを含むソリューションがあります。私がしたいことは、ワンクリックで両方を公開することです。 MVCプロジェクトをルートフォルダ..\MyApp\
に、WebApiを..\MyApp\Api\
に移動します。.NET MVCとWeb APIプロジェクトをビルドして別のフォルダに公開する方法
私はこのような解決策を見たと思いますが、どこからもそれを見つけることはできません。
MVCプロジェクトとWebApiプロジェクトを含むソリューションがあります。私がしたいことは、ワンクリックで両方を公開することです。 MVCプロジェクトをルートフォルダ..\MyApp\
に、WebApiを..\MyApp\Api\
に移動します。.NET MVCとWeb APIプロジェクトをビルドして別のフォルダに公開する方法
私はこのような解決策を見たと思いますが、どこからもそれを見つけることはできません。
物理パスは、公開方法によって決定されます。パブリッシングウィザードを設定して、必要な物理パスを指すようにすることができます。次に、両方のアプリケーションが共存できるように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を教えてくれます。
質問にさらに回答するには、公開する方法を指定してください。
ルーティングやIISについて質問していません。私はすぐに2つのプロジェクトを公開したいと思います。 Apiフォルダはサブフォルダに移動する必要があります。私は単純なVSを使用して公開 –
マクロを作成することで、複数のプロジェクトを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
単語「公開」である物理パスが、スラッシュ(/)のルートを意味することを意味します。私たちは何について話しているのですか?それとも両方ですか? – kettch
私はその両方を想定しています。私はmvcを 'api'フォルダにあるようにルートフォルダとApiに入れたいので、IISの仮想ディレクトリとしてApiフォルダを設定し、URLで使うことができます。 –