VS2013 と monogame を使用して C# で書かれたゲームに取り組んでいます。ただし、monogame は XNA コンテンツ パイプラインをサポートしていないため (まだ)、Microsoft の XNA と VS2010 を使用してコンテンツを個別にビルドすることをお勧めします。プライマリ開発マシン (Win8) を VS2010 などで乱雑にしたくなかったので、Win7 仮想マシンを作成して、Win7 を VS2010 と一緒に実行し、コンテンツを構築するために必要なすべてのツールを使用しました。すべてのプロジェクト ファイルとソリューション ファイルには対応する 2010 バージョンがあり、2010 ソリューションにはコンテンツのビルドに必要なプロジェクトのみが含まれています。
コンテンツを正常にビルドできますが、VM のハード ディスク ( C:\ ) に直接存在する場合のみです。ローカル ドライブをホスト マシンのネットワーク共有にマップしてビルドしようとすると、ビルド時エラーが発生します。なぜ私はこれをしたいのですか?適切な速度で反復できるように、ソース ツリーの単一のコピーが必要だからです。VM に別のソース ツリーがあると、非常に面倒でエラーが発生しやすくなります。
これが私が得るビルドエラーです:
Error loading pipeline assembly "S:\Src\ContentPipelineExtension\bin\x86\Debug\Newtonsoft.Json.dll".
S:\をネットワーク共有にマップしました。示されたパスにNewtonsoft.Json.dllが存在します。
私が試してみました:
- ビルド時に指定
/verbosity:d
して、さらに情報が出力されるかどうかを確認します。ありません。 - 任意の例外での中断を有効にして、 MSBuild.exeプロセスにデバッガーをアタッチします。それは決して壊れません。
subst
Windows エクスプローラーのドライブ マッピング ツールの代わりに使用します (subst
裏で使用している可能性がありますが、確認したかったのです)。- MSBuildをデバッグしていますが、そうしたときに「mismatched leave」バグに遭遇しました。
- 不一致のバグの回避策を適用し、C:\とS:\の両方で同時にビルドをデバッグしました。
BuildContent
どちらの場合も、XNA のタスクが呼び出される直前にブレークポイントを設定しました。このブレークポイントに到達するまで両方のビルドを実行させた後、ローカル ウィンドウを並べて開きました。すべてのローカルを比較したところ、予想されるC:\とS:\のパス ルート以外に違いは見つかりませんでした。 - ILSpy の XNA コードを調べて、どこが間違っているのかを突き止めようとしましたが、それもうまくいきませんでした
- を実行して、CAS のネットワーク共有で完全な信頼を有効にします
CasPol.exe -m -ag 1.2 -url file://S:\* FullTrust
。動作に変更はありません。 - Fusion Log Viewer (
fuslogvw.exe
) を有効にして、そのログをチェックアウトします。アセンブリが正常に読み込まれたと表示されます。 <loadFromRemoteSources enabled="true"/>
私のMSBuild.exe.configに追加されました。変化なし。
マップされたS:\から実行するとビルドが失敗し、ソースのコピーがC:\に配置されると成功するのはなぜですか?
更新:最もひどい回避策を見つけました。C:\の絶対ディレクトリになるようにContentPipelineExtensionプロジェクトを変更しました。これにより、ビルドは正常に完了しますが、明らかに理想からはほど遠いものです。Output Path