【问题标题】:System.Transactions.Diagnostics.DiagnosticTrace throwing TypeInitializationExceptionSystem.Transactions.Diagnostics.DiagnosticTrace 抛出 TypeInitializationException
【发布时间】:2023-03-08 05:26:01
【问题描述】:

似乎与 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 的清单,我发现了这个,看起来很奇怪:

.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中
  • 启动程序集中的 [TargetFramework] 属性有问题。也许你的机器上有一个旧的测试版?先重建。
  • 干净的 RTM 操作系统安装。虽然重用了我的源代码目录。我确实做了很多重建,包括删除一些发布目录。重建什么?
  • 在不同的 win8 机器(升级而不是全新安装)上使用相同的代码库。我在这里使用相同程序集的所有其他应用程序也可以正常工作。
  • 这里可能的答案:stackoverflow.com/q/13315940/1810905

标签: .net .net-4.0 c++-cli windows-8


【解决方案1】:

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

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

【讨论】:

  • 是的,这就是为什么我要求 DSN_SLO 提交它作为答案。
  • Configuration System Failed to Initialize 另请参阅此链接,遇到了我必须编辑 .cpp 文件的情况,删除它还不够(它会重新创建错误)stackoverflow.com/questions/13315940
  • 这确实有效。我花了2天时间来解决这个问题!非常感谢!
【解决方案2】:

(来自上面的 cmets)

我的 app.config 文件中有大小写问题。示例:“connectionstrings”应该是“connectionStrings”。这似乎解决了我的问题。

希望这对其他人有所帮助。

【讨论】:

    【解决方案3】:

    只需清除 App.Config 文件并重建您的项目

    App.Config 应该是这样的

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
      </startup> 
    </configuration>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2014-12-11
      相关资源
      最近更新 更多