【问题标题】:NuGet Msbuild Pack with non-SDK projectNuGet Msbuild Pack 与非 SDK 项目
【发布时间】:2021-03-19 15:50:52
【问题描述】:

我有一个“旧式”.NET 框架项目,其中包括 nuget 引用和其他项目引用。现在我切换到 PackageReference 格式(删除了 packages.config)。我想为我的项目创建一个 NuGet 包。所以我添加了对“NuGet.Build.Tasks.Pack”包的引用并使用了 MSBUILD 包目标。首先,它看起来像预期的那样,生成的包包含我所有的引用和相应的 NuGet 引用。现在我有一个问题,我也使用一个项目来项目参考:

<ProjectReference Include="..\Wrapper\MyWrapper\MyWrapper.csproj">
  <Project>{6b9a7dd0-b93f-3a5e-8fdf-99d0bf811652}</Project>
  <Name>MyWrapper</Name>
</ProjectReference>

基于 nuget 文档 - 供参考:

项目到项目的引用默认被视为 nuget 包参考

但我希望将此项目引用打包到我的包中,而不是“nuget 包引用”。我发现了使用

的帖子

PrivateAssets="全部"

对于项目引用可以解决问题,但是将此属性添加到项目引用节点不会改变任何内容。任何帮助都会很棒!

【问题讨论】:

  • (请注意,您不需要添加对 NuGet.Build.Tasks.Pack 的引用,也不需要 Project GUID)。阅读this thread
  • 嗯,我想我仍然需要这个。您所指的线程是关于 SDK 项目的。但我使用描述中提到的“旧式”项目
  • 您说“现在我切换到 PackageReference 格式(删除了 packages.config)”——听起来您将项目转换为 SDK 样式。你的意思是你使用的是老式 csproj 的一些奇怪的混合,但是在那里使用了一些 SDK 风格的项目的选择位?这听起来很可怕,请不要这样做。直接转换成 SDK 风格的项目
  • @canton7 为什么我不应该这样做。甚至 Visual Studio 本身也在 packages.config 和 References 节点的上下文菜单中提供了“迁移到 PackageReference”选项?
  • @FranzGsell,有关于这个问题的最新消息吗?

标签: c# visual-studio msbuild nuget nuget-package


【解决方案1】:

我想你错过了什么。将PrivateAssets="all" 设置为ProjectReference 是不够的。实际上,nuget 不会将引用的项目视为 nuget 依赖项,并且 nuget 也不会将其程序集 dll 打包到 nupkg 中。您需要其他节点。

试试这些指南:

假设您所有的 lib 项目都以 net framework 4.7.2 为目标。

1)在主项目的xxx.csproj文件中添加PrivateAssets="all"

<ProjectReference Include="..\Wrapper\MyWrapper\MyWrapper.csproj">
  <Project>{6b9a7dd0-b93f-3a5e-8fdf-99d0bf811652}</Project>
  <Name>MyWrapper</Name>
  <PrivateAssets>All</PrivateAssets>
</ProjectReference>

2)也在主项目的xxx.csproj文件中添加这些节点,将程序集dll打包到nupkg中:

<PropertyGroup>
        <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
    </PropertyGroup>
    <Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
        <ItemGroup>
            <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths-&gt;WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))" />
        </ItemGroup>
    </Target>

3) 然后使用这个命令打包项目:

msbuild -t:rebuild,pack -p:PackageOutputPath=xxx\xxx -p:Authors="xxx" -p:Version="x.x.x"

注意:在我这边,主项目名为Mod,它引用了一个名为Mod1 的项目。当我完成打包过程后,您可以在 nupkg 中看到这些。

它将引用的 dll 打包为 lib 而不是 nuget 包。

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多