Symfoware

Symfowareについての考察blog

Mono xbuild(MSBuild)でプログラムのコンパイルを実行する

FreeBSD 10.1にmonoをインストールして動かしてみています。
FreeBSD 10.1にmonoをインストールし、C#のプログラムをコンパイルする

.Netで言うところのMSBuildをmonoで実行する方法を調べてみました。


xbuild



こちらのサイトが非常に参考になりました。
http://smdn.jp/programming/netfx/msbuild/

まず、簡単なプログラムからビルドしてみます。
ソースはこちら。

・sample.cs


  1. using System;
  2. public class Sample {
  3.     
  4.     public static void Main() {
  5.         Console.WriteLine("Hello World!");
  6.     }
  7.     
  8. }




mcsコマンドで簡単にビルドできます。


# mcs sample.cs





これをxbuildでビルドするための定義を作成します。
見様見真似でこんな感じになりました。

・sample.csproj


  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  3.     <Target Name="Build">
  4.         <Csc
  5.             Sources="sample.cs"
  6.             OutputAssembly="sample.exe"
  7.          />
  8.     </Target>
  9. </Project>




xbuildでビルドしてみます。


# xbuild sample.csproj
XBuild Engine Version 12.0
Mono, Version 4.0.1.0
Copyright (C) 2005-2013 Various Mono authors

Build started 2015/07/16 21:26:51.
__________________________________________________
Project "/var/dev/sample03/sample.csproj" (default target(s)):
    Target Build:
        Tool /usr/local/lib/mono/4.5/mcs.exe execution started with arguments: /out:sample.exe sample.cs
Done building project "/var/dev/sample03/sample.csproj".

Build succeeded.
     0 Warning(s)
     0 Error(s)

Time Elapsed 00:00:00.5181330



ビルドできました。





出力先の指定



出力先のフォルダを「bin」にしてみます。


  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  3.     <PropertyGroup>
  4.         <!-- 出力先のパス -->
  5.         <OutputPath>bin/</OutputPath>
  6.     </PropertyGroup>
  7.     <Target Name="Build">
  8.         <!-- 出力先のパスを生成 -->
  9.         <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')"/>
  10.     
  11.         <Csc
  12.             Sources="sample.cs"
  13.             OutputAssembly="$(OutputPath)sample.exe"
  14.          />
  15.     </Target>
  16. </Project>



これでbinディレクトリが作成され、その中にsample.exeが出力されました。





dllの依存関係を指定



dllの依存関係を指定してみます。

ビルドのお題はこちらで作成したNancyのプログラムにします。
FreeBSD + monoでC#のWebフレームワーク「Nancy」を動作させる


  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  3.     <PropertyGroup>
  4.         <!-- 出力先のパス -->
  5.         <OutputPath>bin/</OutputPath>
  6.     </PropertyGroup>
  7.     
  8.     <!-- 依存関係の指定 -->
  9.     <ItemGroup>
  10.         <References Include="packages/Nancy.1.2.0/lib/net40/Nancy.dll"/>
  11.         <References Include="packages/Nancy.Hosting.Self.1.2.0/lib/net40/Nancy.Hosting.Self.dll"/>
  12.     </ItemGroup>
  13.     
  14.     <Target Name="Build">
  15.         <!-- 出力先のパスを生成 -->
  16.         <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')"/>
  17.     
  18.         <Csc
  19.             Sources="HelloModule.cs"
  20.             References="@(References)"
  21.             OutputAssembly="$(OutputPath)HelloModule.exe"
  22.          />
  23.     </Target>
  24. </Project>








依存しているdllをbinにコピー



binフォルダでそのまま実行するために、依存しているdllもコピーします。


  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  3.     <PropertyGroup>
  4.         <!-- 出力先のパス -->
  5.         <OutputPath>bin/</OutputPath>
  6.     </PropertyGroup>
  7.     
  8.     <!-- 依存関係の指定 -->
  9.     <ItemGroup>
  10.         <References Include="packages/Nancy.1.2.0/lib/net40/Nancy.dll"/>
  11.         <References Include="packages/Nancy.Hosting.Self.1.2.0/lib/net40/Nancy.Hosting.Self.dll"/>
  12.     </ItemGroup>
  13.     
  14.     <Target Name="Build">
  15.         <!-- 出力先のパスを生成 -->
  16.         <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')"/>
  17.     
  18.         <Csc
  19.             Sources="HelloModule.cs"
  20.             References="@(References)"
  21.             OutputAssembly="$(OutputPath)HelloModule.exe"
  22.          />
  23.         
  24.          <Copy
  25.             SourceFiles="@(References)"
  26.             DestinationFolder="$(OutputPath)"
  27.          />
  28.     </Target>
  29. </Project>







binディレクトリをクリーン



binディレクトリを一旦削除した後、ビルドを実行してみます。


  1. <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
  2. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
  3.     <PropertyGroup>
  4.         <!-- 出力先のパス -->
  5.         <OutputPath>bin/</OutputPath>
  6.     </PropertyGroup>
  7.     
  8.     <!-- 依存関係の指定 -->
  9.     <ItemGroup>
  10.         <References Include="packages/Nancy.1.2.0/lib/net40/Nancy.dll"/>
  11.         <References Include="packages/Nancy.Hosting.Self.1.2.0/lib/net40/Nancy.Hosting.Self.dll"/>
  12.     </ItemGroup>
  13.     
  14.     <!-- binディレクトリの削除 -->
  15.     <Target Name="Clean">
  16.         <RemoveDir Directories="$(OutputPath)"/>
  17.     </Target>
  18.     
  19.     <Target Name="Build" DependsOnTargets="Clean">
  20.         <!-- 出力先のパスを生成 -->
  21.         <MakeDir Directories="$(OutputPath)" Condition="!Exists('$(OutputPath)')"/>
  22.     
  23.         <Csc
  24.             Sources="HelloModule.cs"
  25.             References="@(References)"
  26.             OutputAssembly="$(OutputPath)HelloModule.exe"
  27.          />
  28.         
  29.          <Copy
  30.             SourceFiles="@(References)"
  31.             DestinationFolder="$(OutputPath)"
  32.          />
  33.     </Target>
  34. </Project>




だいぶ使い方がわかってきました。

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/07/16(木) 21:43:23|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<JavaのPDFライブラリ Apache PDFBoxでHello World | ホーム | FreeBSD + mono + C#でJSONエンコード、デコード>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1753-889a5a5f
この記事にトラックバックする(FC2ブログユーザー)