Visual Studio 2012用のVSMonoTouchプラグインを使用して、クロスプラットフォームソリューションをVisualStudioで完全に構築しようとしています。これは実際にはサポートされておらず、メンテナは新しいブランチを作成するようには見えないため、他の人が2012に移植しました。私のインストールではなく、どこでも機能するようです。
まず、インストールされているものに関するいくつかの情報:
- Win864ビット
- VS2012プレミアム
- .NET 4.5
- v1.0-フォルダ
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework
私がすでに行ったことは、すべてのコードを取得し、VSを使用して拡張機能を開始することです。次のコードでこの例外が発生していることがわかります:(例外はlineitem.Value= v10FrameworkNameで発生します)
コード:
public int OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded)
{
const string targetFrameworkMoniker = "TargetFrameworkMoniker";
object projectObj;
pHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out projectObj);
var project = (Project) projectObj;
if (VSMonoTouchPackage.IsMonoTouchProject(project))
{
var v10FrameworkName = (new FrameworkName(".NETFramework", new Version(1, 0))).FullName;
var item = project.Properties.Item(targetFrameworkMoniker);
if (item != null)
{
if (item.Value == null || (string) item.Value != v10FrameworkName)
{
// Here is where the Exception occures
item.Value = v10FrameworkName;
}
}
else
{
project.Properties.Item(targetFrameworkMoniker).Value = v10FrameworkName;
}
}
return VSConstants.S_OK;
}
例外:
HRESULT:-2147352567
例外メッセージ:
壊滅的な障害(HRESULTからの例外:0x8000FFFF(E_UNEXPECTED))
例外スタックトレース:
EnvDTE.Property.set_Value(Object lppvReturn)at Follesoe.VSMonoTouch.SolutionEvents.OnAfterOpenProject(IVsHierarchy pHierarchy、Int32 fAdded)in c:\ Projects \ VSMonoTouch \ VSMonoTouch \ VSMonoTouchPackage.cs:line 170
本当に奇妙なのは、csproj-MonoTuch-Projectを開くと、プロジェクトはVSがクラッシュするまでロード/アンロード-ロード/アンロード-...を続けます。例外はありません。MonoTouch-Projectを含む既存のソリューションを開くと、上記の例外が発生します。(たとえば、MvvmCross-vNExt-Solutionを開きます)
プロジェクトのプロパティでコンソールアプリケーションをこのターゲットフレームワークに切り替えることができるので、正常に機能しているように見えるのはv1.0.NETFrameworkフォルダーです。クラッシュするコードのコメントを解除するだけで、VSはプロジェクトをロードしますが、有線の状態になっているようです。ターゲットフレームワークを変更できません(プロジェクトのプロパティに選択肢がありません)
この例外を引き起こす可能性のある小さなアイデアをいただければ幸いです。