似乎與Strange exception coming out of OdbcConnection.Open()有關,但我不確定。System.Transactions.Diagnostics.DiagnosticTrace投擲TypeInitializationException
我最近切換到Win8,並沒有運行此應用程序。我正在使用VS2012,但項目尚未升級。異常的轉儲看起來是這樣的:
Unhandled Exception: System.TypeInitializationException:
The type initializer for 'System.Transactions.Diagnostics.DiagnosticTrace' threw an exception. --->
System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize --->
System.TypeInitializationException: The type initializer for 'System.Uri' threw an exception. --->
System.TypeInitializationException: The type initializer for 'System.UriParser' threw an exception. --->
System.TypeInitializationException: The type initializer for 'System.Runtime.Versioning.BinaryCompatibility' threw an exception. --->
System.ArgumentException: String cannot be of zero length.
Parameter name: frameworkName
at System.Runtime.Versioning.BinaryCompatibility.ParseFrameworkName(String frameworkName, String& identifier, Int32& version, String& profile)
at System.Runtime.Versioning.BinaryCompatibility.ParseTargetFrameworkMonikerIntoEnum(String targetFrameworkMoniker, TargetFrameworkId& targetFramework, Int32& targetFrameworkVersion)
at System.Runtime.Versioning.BinaryCompatibility.ReadTargetFrameworkId()
at System.Runtime.Versioning.BinaryCompatibility.get_AppWasBuiltForFramework()
at System.Runtime.Versioning.BinaryCompatibility..cctor()
--- End of inner exception stack trace ---
at System.Runtime.Versioning.BinaryCompatibility.get_TargetsAtLeast_Desktop_V4_5()
at System.UriParser..cctor()
--- End of inner exception stack trace ---
at System.Uri..cctor()
--- End of inner exception stack trace ---
at System.Configuration.ClientConfigurationSystem..ctor()
at System.Configuration.ConfigurationManager.EnsureConfigurationSystem()
--- End of inner exception stack trace ---
at System.Configuration.ConfigurationManager.PrepareConfigSystem()
at System.Configuration.ConfigurationManager.GetSection(String sectionName)
at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection()
at System.Diagnostics.DiagnosticsConfiguration.Initialize()
at System.Diagnostics.DiagnosticsConfiguration.get_Sources()
at System.Diagnostics.TraceSource.Initialize()
at System.Diagnostics.TraceSource.get_Switch()
at System.Transactions.Diagnostics.DiagnosticTrace..cctor()
--- End of inner exception stack trace ---
at System.Transactions.Transaction.get_Current()
at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.InitClass(IComPlusAdapterContext comPlusContextHost, IPersistenceInfoProvider persistenceInfoProvider)
at ZAA.FarmInterface.bw_RunWorkerCompleted(Object sender, RunWorkerCompletedEventArgs e) in d:\eddynet\projects\zaa\zaacmdline\farminterface.cpp:line 482
at System.ComponentModel.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
at System.ComponentModel.BackgroundWorker.AsyncOperationCompleted(Object arg)
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
App.config中看起來像這樣:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <!--For LLBLGen -->
<assemblyIdentity name="Npgsql" culture="neutral" publicKeyToken="5d8b90d52f46fda7"/>
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
我試着重建,都無濟於事。
嘗試在app.config中添加空白部分。
看着清單關閉在ILDASM中的.exe,我發現這一點,這看起來很奇怪:
.assembly zaacmdline
{
.custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = (01 00 00 01 00 54 0E 14 46 72 61 6D 65 77 6F 72 // .....T..Framewor
6B 44 69 73 70 6C 61 79 4E 61 6D 65 10 2E 4E 45 // kDisplayName..NE
54 20 46 72 61 6D 65 77 6F 72 6B 20 34) // T Framework 4
.custom instance void [mscorlib]System.Security.SecurityRulesAttribute::.ctor(valuetype [mscorlib]System.Security.SecurityRuleSet) = (01 00 01 00 00)
.permissionset reqmin
= {[mscorlib]System.Security.Permissions.SecurityPermissionAttribute = {property bool 'SkipVerification' = bool(true)}}
.hash algorithm 0x00008004
.ver 0:0:0:0
}
的TargetFrameworkAttribute肯定是FUBAR,相比於工作機器。我如何解決它?
也許我需要修復我的.net安裝以某種方式?但它集成到Win8中 – Thomas
啓動程序集中的[TargetFramework]屬性有問題。也許你在機器上有一箇舊的測試版?先重建。 –
清潔RTM操作系統安裝。雖然重用了我的源代碼目錄。我做了很多重建,包括刪除了一些發佈目錄。重建什麼? – Thomas