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

如何让VS将NuGet包DLL复制到输出目录?WPF项目加载失败求助

解决WPF中MaterialDesign程序集找不到的XamlParseException问题

我首次在WPF项目(.NET 6 Windows)中使用MaterialDesign,通过NuGet安装MaterialDesignThemes包(版本4.6.1)后,运行程序抛出System.Windows.Markup.XamlParseException,提示找不到MaterialDesignThemes.Wpf, Culture=neutral, PublicKeyToken=df2a72020bd7962a程序集。手动复制该程序集到输出目录后程序可正常运行。

项目的.csproj配置如下:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <Nullable>enable</Nullable>
    <UseWPF>true</UseWPF>
    <BaseOutputPath>$(SolutionDir)\bin\</BaseOutputPath>
    <OutputPath>$(SolutionDir)\bin\</OutputPath>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath>
    <UseCommonOutputDirectory>true</UseCommonOutputDirectory>
     
  </PropertyGroup>
        
  <ItemGroup>
    <PackageReference Include="MaterialDesignThemes" Version="4.6.1" />
    <PackageReference Include="ShowMeTheXAML.MSBuild" Version="2.0.0" />
  </ItemGroup>
</Project>

已尝试添加<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>但未解决问题,以下是可行的解决方法:


可行解决方法

1. 显式引用MaterialDesignThemes.Wpf包

MaterialDesignThemes属于元包,实际运行依赖的MaterialDesignThemes.Wpf可能未被自动正确引入。直接在NuGet中安装MaterialDesignThemes.Wpf包,或在.csproj中添加:

<PackageReference Include="MaterialDesignThemes.Wpf" Version="4.6.1" />

添加后清理项目、重新生成,验证程序集是否自动复制到输出目录。

2. 调整输出目录配置

项目设置的共享输出目录可能干扰依赖项复制逻辑。临时注释相关配置,恢复默认输出路径测试:

<!-- <BaseOutputPath>$(SolutionDir)\bin\</BaseOutputPath> -->
<!-- <OutputPath>$(SolutionDir)\bin\</OutputPath> -->
<!-- <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> -->
<!-- <AppendRuntimeIdentifierToOutputPath>false</AppendRuntimeIdentifierToOutputPath> -->
<!-- <UseCommonOutputDirectory>true</UseCommonOutputDirectory> -->

如果恢复默认后正常,再逐步调整输出目录配置,确保共享目录的依赖复制逻辑正常。

3. 清理NuGet缓存并重新还原

NuGet缓存损坏可能导致包未正确部署,执行以下步骤:

  • 关闭Visual Studio
  • 删除项目下的obj和bin目录
  • 删除用户目录下的NuGet缓存(默认路径:%userprofile%\.nuget\packages)
  • 重新打开项目,执行还原NuGet包操作,再重新生成项目

4. 强制复制程序集的MSBuild任务

在.csproj中添加自定义Copy任务,强制将目标程序集复制到输出目录:

<Target Name="CopyMaterialDesignAssembly" AfterTargets="Build">
  <Copy SourceFiles="$(NuGetPackageRoot)materialdesignthemes.wpf\4.6.1\lib\net6.0-windows\MaterialDesignThemes.Wpf.dll"
        DestinationFolder="$(OutputPath)" />
</Target>

注意替换版本号和路径为你实际的NuGet包安装路径。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:50:29