トップ回答者
C#プロジェクトでVisualBasicライブラリ引用で、MSBuildでビルド時エラー

質問
-
C#のプログラムで、Framework2.0 から入っているMicrosoft.VisualBasic.dllを参照し、
VBのStrings.StrConvを利用している。
MSBuildで
FrameworkパスC:\WINDOWS\Microsoft.NET\Framework\v3.5指定で、
下記ビルドエラーがでます。
error CS1501: 引数を '2' 個指定できる、メソッド 'StrConv' のオーバーロードはありません。
VS2015で開発時問題なくビルドされますが、MSBuild時上記問題が発生で、
原因追求する方法が分からなく、ヒントを頂きたいと思います。
回答
-
まずStrings.StrConvメソッドはドキュメントにあるように3引数で、最後の引数はデフォルト引数により省略可能です。
Visual Basic言語では古くからデフォルト引数をサポートしていましたが、C#言語でデフォルト引数をサポートしたのは.NET 4.0に付属するC# 4.0からです。Visual Studioからはコンパイルに成功しMSBuildからのみコンパイルエラーとなるのは、それぞれで使用したC#コンパイラーのバージョンが異なるからと推測されます。古いC#コンパイラー及び古いMSBuildを使用してビルドを行っていないかを確認してください。
- 回答としてマーク Giko.Yo 2016年3月4日 8:54
すべての返信
-
まずStrings.StrConvメソッドはドキュメントにあるように3引数で、最後の引数はデフォルト引数により省略可能です。
Visual Basic言語では古くからデフォルト引数をサポートしていましたが、C#言語でデフォルト引数をサポートしたのは.NET 4.0に付属するC# 4.0からです。Visual Studioからはコンパイルに成功しMSBuildからのみコンパイルエラーとなるのは、それぞれで使用したC#コンパイラーのバージョンが異なるからと推測されます。古いC#コンパイラー及び古いMSBuildを使用してビルドを行っていないかを確認してください。
- 回答としてマーク Giko.Yo 2016年3月4日 8:54
-
本来Strings.StrConvは引数を3つ必要とするメソッドです。
で、両者の構文のところを見比べると分かりますが、.NET 4.5になって第3引数の既定値が定義されるようになってます。逆に言うと、.NET 3.5のStrConvでは既定値が定義されていないので、引数を省略することができません。
複数のバージョンでビルド分けする必要があるのであれば、常に第3引数を指定するようにしてください。