似乎与 Strange exception coming out of OdbcConnection.Open() 有关但我不确定。

我最近切换到 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 的 list ,我发现了这个,看起来很奇怪:

.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。我该如何解决?

请您参考如下方法:

关于看到下面链接的评论应该可以解决问题。 App's .exe file missing .NET TargetFramework, but only on clean builds

基本上:删除 C:\Users\YOURNAME\AppData\Local\Temp\.NETFramework,Version=v4.0.AssemblyAttributes.cpp


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!