kazuk は null に触れてしまった

C# / .NET 系技術ネタ縛りでお送りしております

Pex & Moles 0.94 をインストールしたらVS2008で csproj を読めなくなったっていう人に捧げます


2010/9/24 追記 0.94.1 がリリースされてました、それでは直ってるはずです(これから試します)

2010/9/24 追記 その2

Facebook 上で Pex and Moles Updated to 0.94.1: VS2008 registration issue and other little issues fixed… The MSDN download should be working again too… なんてアナウンスされていて、0.94.1 ってのが出るのかなと待っていたんですが、0.94のリビジョン違いでリリースされている模様です。

現在でmsdn subscriber downloadから落ちてくる en_visual_studio_2010_pex_0.94_power_tools_x64_587798.exe が0.94.1って事になりそうです。

Pex and Moles – Release Notes – Microsoft Research

v0.94.50921.0, 09/21/2010

Bug Fixes

  • Incorrect registration of MSBuild targets in Visual Studio 2008. The Moles MSBuild targets were not registered correctly for Visual Studio 2008.
  • Null Reference Exception when Assemblies could not be resolved. Moles would fail with a null reference when one of the dependent assembly was not resolved. Moles is still failing but with a nicer error message.

の最初の部分がこのblogで問題にした部分ですね。

中の人はこのblogでのパッチよりもうちっときれいな解決をしてますね。

<MolesBinPath Condition=”$(MolesBinPath) == ””>$(MSBuildThisFileDirectory)</MolesBinPath>

って事で同じディレクトリのを使えって形で変更されています。これで同様に直ってるはずって事で確認できましたのでみんな試してね!

お、64 bitマシンで開発してますね。えらい!、いまどきのサーバは64 bitしかないんだから、32 bit OSなんかで開発とかデバッグなんてできるわけねーよ、ですよね。

C:Program FilesMicrosoft Molesbin に置かれてる Microsoft.Moles.After.targets に原因が有ります。

オリジナルは以下の様になっています

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Begin Microsoft Moles -->
  <PropertyGroup Condition="'$(MolesImported)' != 'true'">
    <MolesInstallDir Condition="$(MolesInstallDir) == ''">$(ProgramFiles)Microsoft Moles</MolesInstallDir>
  </PropertyGroup>
  <Import Condition="'$(MolesImported)' != 'true'"
    Project="$(MolesInstallDir)binMicrosoft.Moles.targets"/>
  <!-- End Microsoft Moles -->
</Project>

VS2008は 32 bitプロセスなんで $(ProgramFiles) は C:Program Files (x86) になってしまい、隣にあるはずの Microsoft.Moles.targets の読み込みに失敗します。

PROCESSOR_ARCHITECTURE に応じて ProgramW6432 とProgramFiles の環境変数参照を切り替える様にします。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Begin Microsoft Moles -->
  <PropertyGroup Condition="'$(MolesImported)' != 'true'">
    <MolesInstallDir Condition="$(MolesInstallDir) == '' And $(PROCESSOR_ARCHITECTURE)=='x86'">$(ProgramW6432)Microsoft Moles</MolesInstallDir>
    <MolesInstallDir Condition="$(MolesInstallDir) == '' And $(PROCESSOR_ARCHITECTURE)=='AMD64'">$(ProgramFiles)Microsoft Moles</MolesInstallDir>
  </PropertyGroup>
  <Import    Condition="'$(MolesImported)' != 'true'"
    Project="$(MolesInstallDir)binMicrosoft.Moles.targets"/>
  <!-- End Microsoft Moles -->
</Project>

#ぶっちゃけボンミスっぽいエラーだったりして、テスト支援ツール作っててこれは無いんじゃねーかなー、ちゃんとテストしてほしいなー>MSさま

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。