You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2019中C#控制台应用调试异常:未设断点时报错,设断点则正常运行

针对非调试模式下AD查找抛出E_UNEXPECTED异常的解决方案

这种调试正常、非调试就报错的问题确实挺棘手的,从你给出的代码和异常堆栈来看,大概率和JIT优化时序、AD资源初始化节奏或者配置加载权限有关,以下是几个可以尝试的解决方向:

1. 先禁用JIT优化快速验证

调试模式下VS会自动关闭JIT优化,而非调试模式默认开启,某些情况下优化会打乱代码执行的时序,触发这类底层COM异常。你可以先通过以下方式验证:

  • 右键项目 → 属性 → 生成 → 取消勾选「优化代码」(针对Release模式)
  • 或者在报错的方法上添加特性强制禁用优化:
using System.Runtime.CompilerServices;

[MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
public void SynchADS<List<YourModelType>> mitarbeiter)
{
    // 你的原有代码逻辑
    PrincipalContext pc = SomeDllClass.GetADContext();
    UserPrincipal adUser = UserPrincipal.FindByIdentity(pc, IdentityType.Sid, myClass.SID);
}

2. 给AD操作加重试机制

非调试模式下代码执行速度更快,可能AD上下文还没完全初始化完成就执行了查找操作,导致底层调用失败。可以加个简单的重试逻辑:

int maxRetry = 3;
UserPrincipal adUser = null;
while (maxRetry > 0)
{
    try
    {
        using (PrincipalContext pc = SomeDllClass.GetADContext())
        {
            adUser = UserPrincipal.FindByIdentity(pc, IdentityType.Sid, myClass.SID);
            break;
        }
    }
    catch (PrincipalOperationException ex)
    {
        maxRetry--;
        if (maxRetry == 0) throw;
        System.Threading.Thread.Sleep(200); // 等待200ms后重试
    }
}

3. 检查配置文件加载问题

从异常堆栈能看到错误起源于System.Configuration.ClientConfigPaths.GetEvidenceInfo,说明非调试模式下配置文件的加载可能存在权限或路径问题:

  • 确认非调试运行时,程序目录下的App.config(或生成后的你的程序名.exe.config)存在且可读取
  • 如果程序运行目录和配置文件路径不一致,尝试手动指定配置路径:
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", @"D:\Git\IMSMitarbeiterSynch\IMSMitarbeiterSynch\IMSMitarbeiterSynch\App.config");

4. 显式释放AD上下文资源

虽然GetADContext没有修改,但可能底层的AD连接缓存导致了非调试下的异常,试试用using语句确保上下文被及时释放:

using (PrincipalContext pc = SomeDllClass.GetADContext())
{
    using (UserPrincipal adUser = UserPrincipal.FindByIdentity(pc, IdentityType.Sid, myClass.SID))
    {
        // 处理adUser的逻辑
    }
}

补充:完整异常信息参考

System.DirectoryServices.AccountManagement.PrincipalOperationException: 严重错误 (HRESULT异常: 0x8000FFFF (E_UNEXPECTED)) ---> System.Runtime.InteropServices.COMException: 严重错误 (HRESULT异常: 0x8000FFFF (E_UNEXPECTED)) bei System.Security.Policy.PEFileEvidenceFactory.GetLocationEvidence(SafePEFileHandle peFile, SecurityZone& zone, StringHandleOnStack retUrl) bei System.Security.Policy.PEFileEvidenceFactory.GenerateLocationEvidence() bei System.Security.Policy.PEFileEvidenceFactory.GenerateEvidence(Type evidenceType) bei System.Security.Policy.AssemblyEvidenceFactory.GenerateEvidence(Type evidenceType) bei System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate) bei System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type) bei System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed) bei System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType) bei System.Security.Policy.Evidence.GenerateHostEvidence(Type type, Boolean hostCanGenerate) bei System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type) bei System.Security.Policy.Evidence.RawEvidenceEnumerator.MoveNext() bei System.Security.Policy.Evidence.EvidenceEnumerator.MoveNext() bei System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName) bei System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath) bei System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig) bei System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig) bei System.Configuration.ClientConfigurationHost.RequireCompleteInit(IInternalConfigRecord record) bei System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject) bei System.Configuration.BaseConfigurationRecord.GetSection(String configKey) bei System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName) bei System.Configuration.ConfigurationManager.GetSection(String sectionName) bei System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName) bei System.DirectoryServices.SearchResultCollection.ResultsEnumerator..ctor(SearchResultCollection results, String parentUserName, String parentPassword, AuthenticationTypes parentAuthenticationType) bei System.DirectoryServices.SearchResultCollection.get_InnerList() bei System.DirectoryServices.SearchResultCollection.get_Count() bei System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRefHelper(Type principalType, String urnScheme, String urnValue, DateTime referenceDate, Boolean useSidHistory) --- 内部异常堆栈跟踪结束 --- bei System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRefHelper(Type principalType, String urnScheme, String urnValue, DateTime referenceDate, Boolean useSidHistory) bei System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRef(Type principalType, String urnScheme, String urnValue, DateTime referenceDate) bei System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithTypeHelper(PrincipalContext context, Type principalType, Nullable`1 identityType, String identityValue, DateTime refDate) bei System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context, Type principalType, IdentityType identityType, String identityValue) bei System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context, IdentityType identityType, String identityValue) bei IMSTools.Base.IMSStd.GetUserPrincipal(PrincipalContext context, IdentityType type, String value) bei IMSMitarbeiterSynch.Program.SynchADS(List`1 mitarbeiter) in D:\Git\IMSMitarbeiterSynch\IMSMitarbeiterSynch\IMSMitarbeiterSynch\Program.cs:Zeile 240. bei IMSMitarbeiterSynch.Program.SynchronizeData() in D:\Git\IMSMitarbeiterSynch\IMSMitarbeiterSynch\IMSMitarbeiterSynch\Program.cs:Zeile 88. bei IMSMitarbeiterSynch.Program.Main(String[] args) in D:\Git\IMSMitarbeiterSynch\IMSMitarbeiterSynch\IMSMitarbeiterSynch\Program.cs:Zeile 53.

内容的提问来源于stack exchange,提问作者Rico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:42:36