将VB代码从XNA 3.1转换为MonoGame。
任何访问类GraphicsAdapter
的尝试都会引发以下异常。例如,尝试枚举GraphicsAdapters。在这一行:
For Each adapter As GraphicsAdapter In GraphicsAdapter.Adapters
结果是一个例外:
System.TypeInitializationException occurred
HResult=-2146233036
Message=The type initializer for 'Microsoft.Xna.Framework.Graphics.GraphicsAdapter' threw an exception.
Source=MonoGame.Framework
TypeName=Microsoft.Xna.Framework.Graphics.GraphicsAdapter
StackTrace:
at Microsoft.Xna.Framework.Graphics.GraphicsAdapter.get_Adapters()
at ...my code...
InnerException:
HResult=-2146233054
Message=Could not load type 'SharpDX.Rectangle' from assembly 'SharpDX, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b4dcf0f35e5521f1'.
Source=MonoGame.Framework
TypeName=SharpDX.Rectangle
StackTrace:
at Microsoft.Xna.Framework.Graphics.GraphicsAdapter.CreateAdapter(Adapter1 device, Output monitor)
at Microsoft.Xna.Framework.Graphics.GraphicsAdapter.PlatformInitializeAdapters(ReadOnlyCollection`1& adapters)
at Microsoft.Xna.Framework.Graphics.GraphicsAdapter..cctor()
请注意内部异常:
Could not load type 'SharpDX.Rectangle' from assembly 'SharpDX, ...Version=4.0.1.0, ...
项目引用这些程序集(以及其他):
所以我不明白为什么会这样失败。
可能有什么不对?与SharpDX版本不兼容?
注意:这些都是来自NuGet的最新软件包,在Visual Studio 2015中。定位.Net 4.5.2。
更新
为了证明它不是SharpDX的问题,我把这一行放在GraphicsAdapter线之前:
Dim testRect As SharpDX.Rectangle = New Rectangle()
这已成功创建testRect
。在尝试访问GraphicsAdapter
之前没有例外。还尝试了GraphicsAdapter
的所有其他共享(静态)属性,例如GraphicsAdapter.DefaultDevice
。任何人都有同样的例外。
答案 0 :(得分:0)
我向MonoGame论坛发布了同样的问题:
http://community.monogame.net/t/solved-typeinitializationexception-accessing-graphicsadapter-adapters-could-not-load-type-sharpdx-rectangle/9803
问题原因:
当前版本的MonoGame.Framework for WindowsDX(Windows操作系统+ DirectX驱动程序),3.6.0.1625是针对SharpDX 2.6.3构建的,与最近的SharpDX版本不兼容。
(中期)解决方案:
MonoGame的开发者分支确实瞄准了当前的SharpDX。可以从MonoGame的团队城市获得构建(需要免费注册)
测试MonoGame.Framework build 3.7.0.994;它适用于SharpDX 4.0.1:
http://teamcity.monogame.net/viewLog.html?buildId=56483&tab=artifacts&buildTypeId=MonoGame_PackagingWindows
该版本将大多数SharpDX dll安装到
C:\Program Files (x86)\MonoGame\v3.0\Assemblies\Windows
但是,SharpDX.Mathematics.dll
目前缺失,
所以我仍然从NuGet安装SharpDX,而不是使用它们。
MonoGame发布的标准位置:
(至少找 3.7 ,这还不存在,正如我写的那样):
http://www.monogame.net/downloads/
(如果不是 MonoGame和SharpDX的 NuGet包,我已经下载了MonoGame 3.6安装程序,并使用其版本的SharpDX dll { {1}},那么我不会有这种不兼容性。但是,对于我的目的来说,这不是最近的SharpDX。这应该通过发布MonoGame 3.7来解决。)