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

msbuild -t:pack打包非SDK格式C#项目时缺失依赖Bar.dll如何解决?

问题原因

非SDK风格的.NET Framework项目执行msbuild -t:pack时,默认会将项目引用识别为NuGet依赖项而非需要打包进当前包的程序集,因此会出现两个问题:一是生成的包内不包含Bar.dll,二是安装时会提示找不到Bar的NuGet包。

解决方案

第一步 修改项目引用配置

打开Foo.csproj,找到指向Bar.csproj的<ProjectReference>节点,新增两个子属性:

<ProjectReference Include="..\Bar\Bar.csproj">
  <!-- 原有Project、Name等节点保持不变 -->
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</ProjectReference>

该配置的作用是告知NuGet打包工具,不要将Bar声明为Foo的NuGet依赖项。

第二步 添加Bar.dll打包规则

在Foo.csproj的根<Project>节点下新增如下配置:

<PropertyGroup>
  <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludeReferencedBarDll</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="IncludeReferencedBarDll" DependsOnTargets="Build">
  <ItemGroup>
    <BuildOutputInPackage Include="$(OutputPath)Bar.dll">
      <TargetFramework>net472</TargetFramework>
    </BuildOutputInPackage>
  </ItemGroup>
</Target>

该规则会在打包流程中自动将编译输出目录下的Bar.dll放入NuGet包对应的lib\net472目录中。

第三步 重新执行打包命令

重新运行msbuild -t:pack Foo.csproj即可生成包含Bar.dll的正常NuGet包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:45:02