2013-01-12 9 views
6

MonoserveとNginxはUbuntuで完全に動作していますが、MSBuildを使用してWindowsボックスにローカルにWebサイトを公開してから、ファイルをコピーする必要があります。Mono XBuildはMVCサイトを公開します

XBuildを使用する代わりに、これを行うLinux CIサーバーを用意したいと思いますが、プロジェクトを.dllに構築するだけで、js、css、viewsなどでパブリッシュして展開するにはどうすればよいですか?

+0

msbuildファイルを手作業で編集しましたか? – flup

+0

あなたのコンテンツファイルにビルドアクションのコンテンツをマークしましたか? – flup

+0

次のリンクはこの問題を解決するのに役立つと思います。http://stackoverflow.com/questions/32781983/code-publish-through-jenkins-for-net-mvc-solution-in-ubuntu-machine/32837666#32837666 – user3220129

答えて

8

通常、「ビルドDLL」の部分は最も難しい部分です。もしあなたがそれを解決したら、あなたはそこに80%いる。残りの半分はコンテンツを公開しています。それは最も基本的な側面で、ソースディレクトリからWebサイトフォルダにファイルの一部をコピーしています。 MSDeployはマイクロソフトの答えです。それはあまりにも複雑です。これを行うNAntタスクを作成しましたが、それはあなたの特定のシナリオにも当てはまりません。ただし、一般的な方法論では次のことができます。

  1. ウェブプロジェクトを探しているslnファイルをクロールします。 Webプロジェクトとは何ですか?技術的には、slnファイル内のcsprojファイルまたはプロジェクトタイプIDを指します。私はうんざりし、 "ターゲットフォルダにはweb.configファイルが含まれています"と定義しました。ソリューションにWebサイトプロジェクトが1つしかない場合は、この手順をスキップして、.csprojファイルをハードコードすることができます。

  2. <Content Include="some\file.ext" />ノードを検索するcsprojファイルをクロールします。 XPathはこれを行うことができ、XMLへのLinqもそれを行うことができます。これにより、.aspx、.cshtml、.js、.css、.png、.configなどのすべての.csファイルが慎重に残されます。真のオリジンファイルの場所を取得するには、.csprojファイルのパスの前に接頭辞を付ける必要があります。また、コピー先のフォルダ構造を確実に保持したい場合もあります。しかし、これはファイルリストを収穫することと比較して些細なことです。

  3. これでファイルリストが完成しました。ソースファイルからコピー先フォルダにコピーします。 csprojファイルのクロールがあなたに与えなかった唯一のものはbinフォルダの内容でしたが、これはcakeです:copy(コピー先のフォルダを最初に空にするか、 binフォルダーのすべての内容。 :D(ファイルの.pdbコピーするかどうかについての健全な議論がありますが、私はそう言う。)

フォーム、その後、上記の3つのステップを行うのいずれかXBuildタスクからそれを呼び出すか、その両方XBuildを呼び出すためのスクリプトこのスクリプトはCIプロセスから取得します。 Poof。あなたは展開ターゲットを持っています。ハッピーコーディング!

+0

ありがとう、私はこれを行うシェルスクリプトを作った。美しく動作しますが、私はいつも、展開プロセスを複製するのはあまりにも複雑であると想定していました。 – Dharun

+0

それはうまく働いてうれしい。 – robrich

0

好ましく私は、この代わりに使用してXBuild 良いニュースは、あなたは私がthis記事で見つかった回避策でこれを行うことができるということですんLinuxのCIサーバーを持っているしたいと思います。

ビルドサーバーには、Microsoft MVC(任意のバージョン)がインストールされていません。この資料は以下の製品について記述したものです。 ただし、これは非常に簡単です - Microsoft MVCはNuGetの にあります。の場合は が必要です。古いバージョンをインストールするには、ページの の古いバージョンをクリックしてください。フレームワークのその バージョンをインストールします。

これはあなたを簡単にします。

+0

リンクをありがとうが、私はこれがウェブサイトの展開を完全には処理せず、dllだけをコンパイルするとは思わない – Dharun

0

@DHarunのアイデアは素晴らしいです! @ダーロンのアイデアに基づいて小さなスクリプトを書いただけで、他人を助けてくれることを願っています。 https://github.com/z-ji/MonoWebPublisher

関連する問題