ユニティ:致命的な実行エンジンエラーのTimeSpanを解決するとき
-
12-09-2019 - |
質問
私が使用してこののTimeSpanを解決しようとしています< href = "http://msdn.microsoft.com/en-us/library/cc468366.aspx" のrel = "nofollowをnoreferrer">ユニティの。 FatalExecutionEngineError の中でコンテナ解決コール結果を実行します。
FatalExecutionEngineErrorが検出されました メッセージ:ランタイムは、致命的なエラーが発生しました。エラーのアドレスは、スレッド0x1bb8に、0x543c3dc8にありました。エラーコードは0xc0000005です。このエラーは、CLRまたはユーザコードの危険または非検証部分のバグであってもよいです。このバグの共通ソースは、ユーザのCOM相互運用またはのPInvokeのエラーをマーシャリング月破損スタックを含む。
DEBUGでテストを実行すると、次のファイルがデバッガによって要求されるようになります。
X:\ユニティ\ SRC \ ObjectBuilder \戦略\ BuildPlan \ DynamicMethod \ DynamicMethodBuildPlan.cs
そして、それはライン38上で ExecutionEngineException に次のことを示しています。
System.ExecutionEngineExceptionは、未処理でした メッセージには、「型 『System.ExecutionEngineException』の例外がスローされました。」= InnerException:
テスト
[TestClass]
public class Example
{
private readonly IUnityContainer container = new UnityContainer();
[TestInitialize]
public void TestInitialize()
{
container.Register<TimeSpan>(new ExternallyControlledLifetimeManager());
}
[TestMethod]
public void Test()
{
var expected = new TimeSpan();
var actual = container.Resolve<TimeSpan>();
Assert.AreEqual(expected, actual);
}
}
解決
あなたがエラーを取得する私はなぜわからないんだけど、私はそれが動作します以下で(設定ファイルにあなたが出て編集した)タイプの構成を交換しようとします。
<instances>
<add name="MyTimeSpan" type="System.TimeSpan" value="1.02:03:04" />
</instances>
var duration = container.Resolve<TimeSpan>("MyTimeSpan");
上記の1日、2時間、3分、4秒の持続時間とタイムスパンを返す必要があります。
(私はユニティ4.1でこれを試してみました)
他のヒント
致命的な実行エンジンエラーのTimeSpanを解決するとき、
私はユニティのCodePlexサイトの上この問題を掲載しました。これは、回答されています。
現在のビットのあなたは正しい "と、InvalidOperationException" を得るにはの。 TimeSpanは、複数のコンストラクタを持っており、デフォルトでは、四引数1をピックアップして、電源にint型かわかりません。構造体は、実際にゼロ引数コンストラクタを持っていない、CLRは、ボンネットの下に「騙し」ます。
ソリューションは、使用するコンストラクタUnityに伝えることです。
container.Register<TimeSpan>(new ExternallyControlledLifetimeManager(),
new InjectionConstructor(0L));