.NET4でEntLib5.0を使用しています。これは機能していましたが、すべてのdllを1つの再配布可能な.dllにマージするためにILMergeを使用しました。EntLib5以外はすべて機能します。ロガーを取得しようとすると、次の例外が発生します。
System.TypeLoadException was unhandled by user code
Message=Inheritance security rules violated while overriding member: 'Microsoft.Practices.Unity.ResolutionFailedException.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'. Security accessibility of the overriding method must match the security accessibility of the method being overriden.
Source=My.Common.Compacted
TypeName=Microsoft.Practices.Unity.ResolutionFailedException.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)
StackTrace:
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, Object existing, String name, IEnumerable`1 resolverOverrides)
at Microsoft.Practices.Unity.UnityContainer.DoBuildUp(Type t, String name, IEnumerable`1 resolverOverrides) in :line 0
at Microsoft.Practices.Unity.UnityContainer.Resolve(Type t, String name, ResolverOverride[] resolverOverrides) in :line 0
at Microsoft.Practices.Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, ResolverOverride[] overrides) in :line 0
at Microsoft.Practices.Unity.UnityContainerExtensions.AddNewExtension[TExtension](IUnityContainer container) in :line 0
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity.UnityContainerExtensions.AddNewExtensionIfNotPresent[TExtension](IUnityContainer container) in :line 0
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ContainerModel.Unity.UnityContainerConfigurator..ctor(IUnityContainer container) in :line 0
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.CreateDefaultContainer(IConfigurationSource configurationSource) in :line 0
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.CreateDefaultContainer() in :line 0
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.SetCurrentContainerIfNotSet() in :line 0
at Microsoft.Practices.EnterpriseLibrary.Common.Configuration.EnterpriseLibraryContainer.get_Current() in :line 0
at My.Common.Diagnostics.Logger..ctor(Boolean failSilently) in D:\TFS Source\My.COMMON\Framework4.0\My.Common\Diagnostics\Logger.cs:line 35
at My.Common.Tests.LoggerTest.LoggerTestMethod() in D:\TFS Source\My.COMMON\Framework4.0\My.Common.Tests\LoggerTests.cs:line 21
InnerException:
ここでSOで読んだのですが、その例外は.NET4からのものです。これは、コーディングのセキュリティに関してより厳密になっているためですが、どうすればよいでしょうか。EntLib 5ソースコードをダウンロードして自分で修正しますか?
そのチェックを無効にする方法はありますか?
私はこの順序でファイルをマージしました、多分それは間違った順序です:
"$(TargetDir)My.Common.dll"
"$(TargetDir)Microsoft.Practices.ServiceLocation.dll"
"$(TargetDir)Microsoft.Practices.Unity.dll"
"$(TargetDir)Microsoft.Practices.Unity.Interception.dll"
"$(TargetDir)Microsoft.Practices.EnterpriseLibrary.Common.dll"
"$(TargetDir)Microsoft.Practices.EnterpriseLibrary.Logging.dll"
乾杯。