none
C#プロジェクトでVisualBasicライブラリ引用で、MSBuildでビルド時エラー RRS feed

  • 質問

  • C#のプログラムで、Framework2.0 から入っているMicrosoft.VisualBasic.dllを参照し、

    VBのStrings.StrConvを利用している。

    MSBuildで

    FrameworkパスC:\WINDOWS\Microsoft.NET\Framework\v3.5指定で、

    下記ビルドエラーがでます。

       error CS1501: 引数を '2' 個指定できる、メソッド 'StrConv' のオーバーロードはありません。

    VS2015で開発時問題なくビルドされますが、MSBuild時上記問題が発生で、

    原因追求する方法が分からなく、ヒントを頂きたいと思います。

    2016年3月4日 2:23

回答

  • まず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
    2016年3月4日 2:32

すべての返信

  • まず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
    2016年3月4日 2:32
  • .NET 3.5のStrings.StrConv メソッド

    .NET 4.5のStrings.StrConv メソッド

    本来Strings.StrConvは引数を3つ必要とするメソッドです。

    で、両者の構文のところを見比べると分かりますが、.NET 4.5になって第3引数の既定値が定義されるようになってます。逆に言うと、.NET 3.5のStrConvでは既定値が定義されていないので、引数を省略することができません。

    複数のバージョンでビルド分けする必要があるのであれば、常に第3引数を指定するようにしてください。

    2016年3月4日 2:32
  • 構文をVBに切り替えると分かりますが、当該メソッドは従来より既定値が設定されています。C#言語では言語そのものが既定値に対応していなかったためにドキュメント上で表現手段がなかっただけかと思われます。
    2016年3月4日 2:42
  • はや、そりゃそうですね。
    2016年3月4日 2:58
  • 回答ありがとうございます。さすがに知っている方だとすぐ回答が出てきますね。

    Googleしても内容が少なく、原因特定できませんでした。

    大変助かりました。大変ありがとうございます。


    2016年3月4日 8:56