我尝试使用 Visual Studio 2012 的 VSMonoTouch 插件在 Visual Studio 中完全构建我的跨平台解决方案。由于这并没有得到真正的支持,并且维护者看起来并不像他会创建一个新的分支,因此其他一些人将其移植到 2012 年。看起来可以在任何地方工作,而不是我的安装。
首先是有关安装内容的一些信息:
- 赢 8 64 位
- VS 2012 高级版
- .NET 4.5
- v1.0-文件夹入
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework
我已经完成的是获取所有代码并使用 VS 启动扩展。我可以看到,在以下代码中发生了此异常:(行 item.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;
}
例外:
结果:-2147352567
异常消息:
灾难性故障(HRESULT 异常:0x8000FFFF (E_UNEXPECTED))
异常堆栈跟踪:
在 EnvDTE.Property.set_Value(Object lppvReturn) 在 Follesoe.VSMonoTouch.SolutionEvents.OnAfterOpenProject(IVsHierarchy pHierarchy, Int32 fAdded) 在 c:\Projects\VSMonoTouch\VSMonoTouch\VSMonoTouchPackage.cs:line 170
真正奇怪的是,当我打开一个 csproj-MonoTuch-Project 时,该项目一直在加载/卸载 - 加载/卸载 - ...直到 VS 崩溃。也不例外。打开包含 MonoTouch-Project 的现有解决方案时,出现上述异常。(例如打开 MvvmCross-vNExt-Solution)
似乎工作正常的是我的 v1.0 .NETFramework 文件夹,因为我可以在项目属性中将控制台应用程序切换到此目标框架。当我简单地取消注释崩溃代码时,VS 将加载项目,但似乎处于有线状态。我无法更改目标框架(项目属性中根本没有选择)
任何可能触发此异常的小想法都将受到高度赞赏。