LoginSignup
23
23

More than 5 years have passed since last update.

OmniSharp(on Mountain Lion)導入メモ

Last updated at Posted at 2013-07-06

最近横から「M○N○ Developェ…」みたいな呪詛が聞こえ続けているため,何か代替ないか探したところ,OmniSharpというvimプラグインが熱いらしい.ということで実際に導入してみた.

概ね先人の道をなぞるだけでOKだったので,ハマったポイントのみ記載する.
読むと分かるが,ハマったのは自分の環境の問題のため,OmniSharpは何も悪くない.(今のところ)

(ref) http://d.hatena.ne.jp/thinca/20130522/1369234427

ハマり1:NeoBundle経由のインストールでハマる

NeoBundle経由でOmniSharpをインストールするために,以下の設定をvimrcに加えた.

NeoBundleLazy 'nosami/Omnisharp', {
\   'autoload': {'filetypes': ['cs']},
\   'build': {
\     'mac': 'xbuild server/OmniSharp.sln',
\     'unix': 'xbuild server/OmniSharp.sln',
\   }
\ }

しかし,ビルドの段階で失敗...

Not installed bundles: ['Omnisharp']
Install bundles now?
(y)es, [N]o: y

[neobundle/install] (1/1): |Omnisharp| git clone --depth 1 git://github.com/nosami/Omnisharp.git "/Users/tatsuro/.vim/bundle/Omnisharp"
[neobundle/install] (1/1): |Omnisharp| Updated
[neobundle/install]  -> 6637145b31985a30fc746c62a854d28c3b77562c
[neobundle/install] Building...
XBuild Engine Version 2.6.5.0^@Mono, Version 2.6.5.0^@Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2009.^@MSBUILD: error MSBUILD0000: Project file 'server/OmniSharp.sln' not found.
[neobundle/install] Installed/Updated bundles:
Omnisharp

OminiSharpがローカルに立てるサーバ(serverディレクトリ)はgitサブモジュール化されているが,それが上手くダウンロードできていないようだ.

…何のことはない.NeoBundleのバージョンが古いだけだった.最新のバージョンでは,プロジェクトをcloneする際, git clone --recursiveとするため,サブモジュールは自動的にダウンロードされる.

Not installed bundles:  ['Omnisharp']
Install bundles now?
(y)es, [N]o: y

[neobundle/install] (1/1): |Omnisharp| git clone --recursive git://github.com/nosami/Omnisharp.git "/Users/tatsuro/.vim/bundle/Omnisharp"
[neobundle/install] (1/1): |Omnisharp| Updated
[neobundle/install] |Omnisharp|  -> 6637145b31985a30fc746c62a854d28c3b77562c
[neobundle/install] Building...
[neobundle/install] XBuild Engine Version 2.10.11.0
Mono, Version 2.10.11.0
Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2011.

ハマリ2:コンパイルできずにハマる

上記の問題解決後,今度はコンパイルエラーに遭遇する…
今後の原因は,Monoのサポートしている.Netのバージョン.

OmniSharpをコンパイルするには,.Net4.0が必要.

$ vi ~/repos/Omnisharp/server/OmniSharp/OmniSharp.csproj

  <PropertyGroup>
    ...
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    ...
  </PropertyGroup>

自分はUnityにバンドルされているMonoを使用していたのだが,どうもこのバージョンが.Net4.0をサポートしていない.

$ /Users/tatsuro/.vim/bundle/neobundle.vim% /Applications/Unity/Unity.app/Contents/Frameworks/Mono/bin/mono --version
Mono JIT compiler version 2.6.5 (tarball Mon May 27 21:28:32 CEST 2013)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
        TLS:           normal
        GC:            Included Boehm (with typed GC)
        SIGSEGV:       altstack
        Notification:  Thread + polling
        Architecture:  x86
        Disabled:      none

$ vi /Applications/Unity/Unity.app/Contents/Frameworks/Mono/lib/mono/2.0/Microsoft.Common.targets
  ...
        <GetFrameworkPath>
            <Output Condition="'$(TargetFrameworkVersion)' == 'v3.5'"
                TaskParameter="FrameworkVersion35Path"
                ItemName="TargetFrameworkDirectories"/>
            <Output Condition="'$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'" 
                TaskParameter="FrameworkVersion30Path"
                ItemName="TargetFrameworkDirectories"/>
            <Output Condition="'$(TargetFrameworkVersion)' == 'v2.0' or '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5'" 
                TaskParameter="FrameworkVersion20Path"
                ItemName="TargetFrameworkDirectories"/>
        </GetFrameworkPath>
  ...

ということで,最新のMonoを別途インストールしたところ,無事コンパイルできた.
http://www.go-mono.com/mono-downloads/download.html

$ /usr/bin/mono --version
Mono JIT compiler version 2.10.11 (mono-2-10/2baeee2 Wed Jan 16 16:40:16 EST 2013)
Copyright (C) 2002-2012 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
        TLS:           normal
        SIGSEGV:       normal
        Notification:  kqueue
        Architecture:  x86
        Disabled:      none
        Misc:          softdebug
        LLVM:          yes(2.9svn-mono)
        GC:            Included Boehm (with typed GC)

ここまできたら

あとはcsファイルを開いてやれば,以下のようにいい感じに補完候補がでるようになる.

Screen Shot 2013-07-07 at 0.35.29.png

なお,自分の環境では,OmniSharpサーバ起動直後に標準ライブラリの補完を行おうとすると,以下のようなエラーメッセージがでる.
最初の補完は必ず失敗するものの,二回目は補完できるので現状はスルーしている.
(エラーから見ると,初回時のDoc読み込みの問題かな?)

Error while reading monodoc file.System.ArgumentNullException: Argument cannot be null.
Parameter name: s
  at System.IO.StringReader..ctor (System.String s) [0x00000] in <filename unknown>:0
  at (wrapper remoting-invoke-with-check) System.IO.StringReader:.ctor (string)
  at Mono.Xml2.XmlTextReader..ctor (System.String xmlFragment, XmlNodeType fragType, System.Xml.XmlParserContext context) [0x00000] in <filename unknown>:0
  at System.Xml.XmlTextReader..ctor (System.String xmlFragment, XmlNodeType fragType, System.Xml.XmlParserContext context) [0x00000] in <filename unknown>:0
  at System.Xml.XmlDocument.LoadXml (System.String xml) [0x00000] in <filename unknown>:0
  at Monodoc.RootTree.GetHelpXml (System.String id) [0x00000] in <filename unknown>:0
  at MonoDevelop.Ide.TypeSystem.MonoDocDocumentationProvider.GetDocumentation (IEntity entity) [0x00000] in <filename unknown>:0
23
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
23