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

NuGet包安装成功后自定义C++ dll未复制到目标项目文件夹问题

问题根因

  1. 现有配置的CopyToOutputDirectory仅会将文件复制到编译输出目录(如bin/Debug),不会主动复制到项目源码根目录。
  2. Install.ps1不生效的本质是NuGet的设计限制:只有使用packages.config管理NuGet包的项目才会执行Install.ps1脚本,使用PackageReference格式的项目不会执行任何PowerShell脚本,你看到的项目名显示为ProjectName\ProjectName.csproj就是PackageReference格式的特征。
  3. 你当前的targets配置没有显式定义复制到项目目录的执行逻辑,仅声明了文件元数据,MSBuild不会自动触发复制到项目目录的动作。

解决方法

替换你的Comp.Dep.NetClient.targets文件内容为如下配置:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <!-- 匹配build目录下所有C++ dll -->
    <NativeLibs Include="$(MSBuildThisFileDirectory)*.dll" />
  </ItemGroup>

  <!-- 绑定到编译前执行,首次编译时自动将dll复制到项目根目录 -->
  <Target Name="CopyNativeDllToProjectRoot" BeforeTargets="BeforeBuild">
    <Copy 
      SourceFiles="@(NativeLibs)"
      DestinationFolder="$(ProjectDir)"
      SkipUnchangedFiles="true"
    />
  </Target>

  <!-- 保留原有逻辑,同时将dll复制到编译输出目录 -->
  <ItemGroup>
    <None Include="@(NativeLibs)">
      <Link>%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

额外注意事项

  • NuGet包的build目录下的targets文件名必须和包ID完全一致,你当前的命名Comp.Dep.NetClient.targets符合要求,无需修改。
  • PackageReference格式的项目不支持NuGet安装时立刻执行自定义逻辑,因此dll会在项目首次编译时复制到项目目录,无法做到安装完成后立刻出现。
  • 复制逻辑不要放在.props文件中,.props会在项目加载早期导入,$(ProjectDir)等变量尚未完成初始化,会导致路径解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:15:00