2

私はこの問題を数日間調査しましたが、答えはありませんでした。エラー コードへの参照がありますが、根本的な問題に関係なく、すべての「コンパイラの初期化」エラーに BC2000 が使用されていると思います。

MSBuild 12.0 を使用して開発環境で問題なくコンパイルできる VS ソリューションがあります。ただし、MSBuild 12.0 を使用して Win 2008 R2 SP1 ビルド マシンでコンパイルしようとすると、致命的なエラーが発生します。

MSBuild に対して実行されるコマンドは次のとおりです。

"C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe" "path\to\solution.sln" /target:Clean;Build /verbosity:normal /toolsversion:12.0 /nologo /property:WarningLevel="2" /property:Configuration="Release"

受け取ったエラーは次のとおりです。

vbc: Error: Fatal error BC2000 : compiler initialization failed unexpectedly: Project already has a reference to assembly Microsoft.VisualBasic. A second reference to 'path\to\dotnet4\System.dll' cannot be added. (Fatal error BC2000)

これはこの質問に似ています。ただし、Mono を使用していないため、彼らが使用するセットアップはありません。

問題のプロジェクトには、Microsoft.VisualBasic アセンブリへの参照が 1 つしかありません。また、実行される vbc コマンドは開発マシンとビルド マシンで類似しており、前述のアセンブリを 1 回だけ参照します。

開発マシンとビルド マシンも同様です。

  • .NET フレームワークのバージョン: 4.6.1
  • 使用している MSBuild: 12.0

違う:

  • 開発マシンには VS 2010 または VS 2013 が搭載されています。
  • ビルド マシンに VS がインストールされていません。
  • ビルド マシンには、MS Visual C++ Build Tools 2015 もインストールされています。

誰もこの問題に遭遇したことがありますか? それを修正する方法についてのアイデアはありますか?ありがとう。

4

1 に答える 1

1

開発マシンでビルドを実行しているときに、vbc コマンド (巨大なので投稿しません) を確認したところ、次のフォルダーにある Microsoft.VisualBasic.dll にリンクしていました。

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0

.Net Framework 4 SDK が含まれていないため、ビルド マシンでこのフォルダーを使用できないことに気付きました。そのため、「Windows 7 および .NET Framework 4 用の Microsoft Windows SDK」をインストールしました (はい、ビルド マシンが Win 2008 R2 であっても)、動作しました。

さて、その SDK をインストールするには、新しいバージョンだった .Net Framework を最初にアンインストールする必要がありました。次に .Net Framework 4 をインストールし、次に前述の SDK をインストールしてから、.Net Framework 4.6.1 に再度更新します。

つまり、要約すると:

  1. ビルド マシンで MSBuild を実行し、出力をログ ファイルにリダイレクトする
  2. ログ ファイルを開き、失敗した vbc コマンドを確認します。
  3. 開発マシンで MSBuild を実行し、出力をログ ファイルにリダイレクトする
  4. ログ ファイルを開き、手順 2 で特定したコマンドを見つけます。
  5. (エラーから) 問題のアセンブリがどこにあるかを確認します
  6. 最初に言ったようなディレクトリであれば、そのバージョンの .Net Framework 用の SDK をインストールする必要があるかもしれません。私の場合、ディレクトリにはそのv4.0があったため、.Net Fw 4.0用でした。

うまくいけば、これは他の誰かを助けるでしょう。

于 2016-01-20T20:16:06.877 に答える