.NET6 WPF安装项目异常:System.DirectoryServices.AccountManagement平台不支持
我有一个WPF应用,使用System.DirectoryServices.AccountManagement访问Active Directory。Debug或Release配置构建时一切正常,但创建Setup Project时会抛出异常:System.DirectoryServices.AccountManagement is not supported on this platform。该应用此前是.NET5项目,通过Microsoft升级工具升级到.NET6。
补充发现:安装文件未生成App.deps.json和App.dll.config文件。
- 缺失
App.deps.json会导致找不到AccountManagement; - 缺失
App.dll.config会导致应用无法读取配置内容。
项目属性配置
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net6.0-windows</TargetFramework> <Nullable>enable</Nullable> <UseWPF>true</UseWPF> <ApplicationIcon>Assets\rfid.ico</ApplicationIcon> </PropertyGroup> <ItemGroup> <None Remove="Assets\logo-white.png" /> <None Remove="Assets\logo.png" /> <None Remove="Assets\user.svg" /> </ItemGroup> <ItemGroup> <PackageReference Include="MyCompany.DutScanner" Version="5.2.1" /> <PackageReference Include="MyCompany.TestSystemLogger" Version="1.2.1" /> <PackageReference Include="LoadingSpinner.WPF" Version="1.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" /> <PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.2-beta1" /> <PackageReference Include="Serilog" Version="2.11.0" /> <PackageReference Include="Serilog.AspNetCore" Version="6.0.1" /> <PackageReference Include="Microsoft.DotNet.UpgradeAssistant.Extensions.Default.Analyzers" Version="0.4.336902"> <PrivateAssets>all</PrivateAssets> </PackageReference> <PackageReference Include="Microsoft.Windows.Compatibility" Version="6.0.0" /> <PackageReference Include="System.DirectoryServices.AccountManagement" Version="6.0.0" /> </ItemGroup> <ItemGroup> <Resource Include="Assets\logo-white.png" /> <Resource Include="Assets\logo.png" /> <Resource Include="Assets\user.svg" /> </ItemGroup> <ItemGroup> <None Update="App.config"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> </ItemGroup> <ItemGroup> <Folder Include="Properties\PublishProfiles\" /> </ItemGroup> <ItemGroup> <None Include="..\.editorconfig" Link=".editorconfig" /> </ItemGroup> </Project>
环境信息
- 机器系统:Windows 10 x64
- 已安装框架版本:
- dotnet-sdk-6.0.301-win-x64.exe
- aspnetcore-runtime-6.0.8-win-x64.exe
- dotnet-hosting-6.0.8-win.exe
- windowsdesktop-runtime-6.0.8-win-x64.exe
- ndp48-web.exe (.NET Framework 4.8)
已尝试的解决方法
- 从NuGet包管理器移除并重新添加相关包
- 手动将Debug/Release文件夹中的.dll添加到安装项目
- 验证
App.deps.json中使用了正确版本
1. 手动补充缺失的配置文件到Setup Project
右键Setup Project → 添加 → 文件,导航到WPF项目的bin\Release\net6.0-windows(或Debug)目录,选中App.deps.json和App.dll.config添加进去,确保两个文件的「复制到输出目录」设置为「始终复制」。
2. 强制项目生成依赖配置文件
在WPF项目的.csproj文件中添加以下配置,确保构建时必生成这两个关键文件:
<PropertyGroup> <GenerateDependencyFile>true</GenerateDependencyFile> <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> </PropertyGroup>
3. 对齐Setup Project的目标平台
右键Setup Project → 属性,在「常规」选项卡中将「目标平台」设置为x64,和应用及系统架构保持一致,避免因平台不匹配导致依赖加载失败。
4. 改用自包含发布后再打包(推荐)
如果传统Setup Project问题频发,可改用.NET自带的发布流程:
- 右键WPF项目 → 发布
- 选择「文件夹」目标,设置发布模式为「自包含」,目标运行时为
win-x64 - 发布完成后,将输出目录的所有文件添加到Setup Project,确保所有依赖(包括运行时、配置文件)都被完整包含
5. 确认兼容包有效性
检查Microsoft.Windows.Compatibility包是否正确安装,这个包是System.DirectoryServices.AccountManagement在.NET 6上正常运行的必要依赖,版本需和.NET 6匹配(如6.0.0),若之前移除过需重新安装。
完成以上步骤后,重新构建Setup Project并测试即可解决异常。
内容的提问来源于stack exchange,提问作者Alex

