访问MonoGame GraphicsAdapter.Adapters的TypeInitializationException无法加载类型'SharpDX.Rectangle'

时间:2017-10-11 19:39:12

标签: monogame sharpdx

将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, ... 

项目引用这些程序集(以及其他):

  • MonoGame.Framework version = 3.6.0.1625
    来自NuGet“MonoGame.Framework.WindowsDX”,文件
    包\ MonoGame.Framework.WindowsDX.3.6.0.1625 \ lib中\ net40 \ MonoGame.Framework.dll
  • SharpDX版本= 4.0.1.0
  • SharpDX.Direct2D1版本= 4.0.1.0
  • SharpDX.Direct3D9版本= 4.0.1.0
  • SharpDX.DXGI版本= 4.0.1.0
  • SharpDX.Mathematics 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。任何人都有同样的例外。

1 个答案:

答案 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来解决。)