【问题标题】:Nuget Install - .net core - All assemblies in lib directory are not added as referencesNuget 安装 - .net 核心 - lib 目录中的所有程序集均未添加为引用
【发布时间】:2021-05-28 04:21:34
【问题描述】:

作为项目的一部分,我创建了一个 nuget 包(针对 .net core 3.1),它在最终的“lib”目录中有多个程序集。尽管 .net 核心主张为每个引用的项目创建一个单独的 nuget 包,但我遵循了提到的解决方法here。但是当我尝试在另一个简单的控制台项目中使用这个 nuget 时,我没有看到“编译时程序集”中引用的 lib 目录中存在的所有 DLL,只有其中一个列在编译时程序集中。我在这里有什么遗漏吗。 ?感谢任何帮助

【问题讨论】:

  • 我没有投反对票,但您没有提供足够的信息让我进行调查。我不想阅读您链接的博客文章,创建多个项目并测试生成的包。也许我太懒了,但如果我调查的时间超过 60 秒,我就不太可能了。另外,也许它对我来说“只是工作”,那么我不知道为什么它对你不起作用。如果您遵循 StackOverflow 的建议,人们会更容易为您提供帮助:stackoverflow.com/help/minimal-reproducible-example
  • 鉴于 NuGet 根据包中文件路径/名称的约定工作,告诉我们 nupkg 中的文件列表可能足以回答您的问题。甚至博文也没有显示生成的 nupkg 的文件列表。
  • 嗨,Naren,有关于您的问题的最新消息吗?
  • 嗨,Naren,有关于这个问题的最新消息吗?请检查我的回答是否可以帮助您解决问题。如果有帮助,请不要忘记accept it。如果没有,请随时告诉我们。

标签: .net visual-studio .net-core nuget nuget-package-restore


【解决方案1】:

如果您的主要 nuget 项目在 Dependencies-->Assemblies 下有许多引用的程序集 dll,则它不会被您的函数添加到 nuget 包中,因为它非常脆弱。

您必须将它们全部重新打包。只需将这些节点额外添加到csproj 文件中即可。

<ItemGroup>
        <None Include="$(TargetDir)\*.dll" Pack="true" PackagePath="lib\$(TargetFramework)"></None>
</ItemGroup>

这是我的整个 csproj 文件,它将引用的程序集 dll 和项​​目引用中的所有 dll 打包到 Lib 文件夹中。

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

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
      <ProjectReference Include="..\testtt\testtt.csproj">
          <ReferenceOutputAssembly>true</ReferenceOutputAssembly>
          <IncludeAssets>testtt.dll</IncludeAssets>
        
      </ProjectReference>
  </ItemGroup>

  <ItemGroup>
    <Reference Include="testr" Pack="true" PackagePath="lib\$(TargetFramework)">
      <HintPath>..\..\testr\testr\bin\Debug\netstandard2.0\testr.dll</HintPath> 
    </Reference>
  </ItemGroup>

    <PropertyGroup>
        <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
    </PropertyGroup>
    <Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
        <ItemGroup>
            <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths-&gt;WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))" />
        </ItemGroup>
    </Target>
    <ItemGroup>
        <None Include="$(TargetDir)\*.dll" Pack="true" PackagePath="lib\$(TargetFramework)"></None>
    </ItemGroup>
</Project>

注意:当您将新的release版本安装到另一个项目时,请先删除C:\Users\xxx\.nuget\packagesuse this way to clean the nuget caches下存在旧错误版本的所有nuget缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 2020-08-12
    • 2019-04-04
    • 2016-09-03
    • 2017-09-08
    • 1970-01-01
    • 2018-04-26
    • 2018-01-23
    相关资源
    最近更新 更多