繁体   English   中英

在 VS2019 中 nuget 不将引用的项目视为 lib,而是将其视为 nuget 包

[英]In VS2019 nuget doesn't consider referenced projects as lib, but as nuget packages

我正在使用 VS2019 社区版。 I have two .net core projects X, Y, X is referencing Y, and I want to package X as a Nuget package, I'm using the package feature in VS2019. when I try to add X's Nuget package in another project it searches for Y as a Nuget package and not as DLL should be in X.

如何更改此设置,以便在 X 的 package 中将 Y 添加为 DLL?

我尝试将以下内容添加到 X 的项目(.csproj)中:

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

But I still get the same result, nuget.exe tries to restore Y as Nuget package not as DLL comes with X's package.

  • 更新:

此外,如果 Y 有另一个 Nuget 依赖项,则应在 X 中考虑它,而不直接在 X 中引用它。

我尝试了以下方法:
在 X 的项目中:

  • Go 到依赖项-> 项目。
  • 右键单击 Y 的项目,然后单击Properties
  • Private Assets设置为All
    现在这将在 X 的 nuspec 文件的lib文件夹中添加 Y 的nuspec文件。
    如果 Y 不依赖于 X 不知道的任何其他 Nuget 包,这将正常工作,因为这些包不会在 X 的nuspec文件中作为依赖项被提及。

最后我确定了这一点:
只需参考 Y,也为它生成 package 并使用它:'(

在 VS2019 中 nuget 不将引用的项目视为 lib,而是将其视为 nuget 包

Actually , the new nuget feature which you used and also PackagePath="lib" function will treat the dll as a nuget dependency rather than an assembly dll.

如果您只是希望Y成为一个程序集 DLL 而不是 nuget package,这些方法将不起作用。 这些方法我都试过了,真的让我很挣扎。

经过深入研究,我发现问题是dotnet pack会将引用的项目作为nuget pacakge自动添加到主nuget ZEFE90A8E604A7C840E88D03A67F6B7D中。 因为dotnet pack会根据其规则自动生成一个Nuspec文件给package项目,默认将引用的项目视为Nuget package。 您可以打开X.nupkg文件,并在X.nuspec文件下看到如下所示:

在此处输入图像描述

但是,在这种打包机制中,我们无权更改规则。

建议

1)VS2019中使用Pack Button创建X.nupkg文件时,请手动对X.nupkg进行一些修改。

使用zip打开 nuget 压缩 package,然后打开X.nuspec文件并删除这些节点:

<dependencies>
      <group targetFramework=".NETStandard2.0">
        <dependency id="Y" version="1.0.0" exclude="Build,Analyzers" />
      </group>
</dependencies>

保存更改,然后使用修改后的X.nupkg

2)或者您应该根据我们的需要和规则手动创建自定义 nuspec 文件来指导 nuget 打包过程。

尝试使用这个nuspec文件:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>xxx</id>
    <version>1.0.0</version>
    <title>xx</title>   
    ..................    
  </metadata>

<files>
<file src="bin\xxx\xxx\Y.dll" target="lib\xxx(targetframework)"/>
</files>

</package>

此外,如果 Y 有另一个 Nuget 依赖项,则应在 X 中考虑它,而不直接在 X 中引用它。

到目前为止,Nuget 没有询问主项目是否使用引用项目的依赖 package dll 的功能。

并且来自引用项目的依赖项始终存在于主项目中。

另外,如果您仍然需要这些问题,您可以在我们的团队论坛上报告这些问题,希望团队仔细检查并给您满意的答复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM