NuGet 包差异取决于构建方法

NuGet package differences depending on build method

我有一个 .NET Core 项目,我想将其打包为 NuGet 包以用于其他 Visual Studio projects/solutions。在 .NET Core 项目中,有一个很好的功能,您可以在项目属性中 select 在构建时生成 NuGet 包,我试过了。结果是一个包,我们称之为 My.Company.Package,它有一个生成的 nuspec 文件,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>My.Company.Package</id>
    <version>10.1.2</version>
    <authors>My.Company.Package</authors>
    <owners>My.Company.Package</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <dependencies>
      <group targetFramework=".NETCoreApp3.1">
        <dependency id="Microsoft.Win32.Registry" version="4.7.0" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="C:\dev\MyProduct\bin\Debug\netcoreapp3.1\My.Company.dll" target="lib\netcoreapp3.1\My.Company.dll" />
  </files>
</package>

在另一个解决方案中安装内置包时,NuGet 包管理器显示如下:

Installing:

Microsoft.NETCore.Platforms.3.1.0
Microsoft.Win32.Registry.4.7.0
My.Company.Package.10.1.2
System.Security.AccessControl.4.7.0
System.Security.Principal.Windows.4.7.0

安装后,包似乎工作正常,我可以访问包中应该包含的命名空间和 类。

由于我不会在这里深入的原因,我必须自己打包,没有这个选项。我在 Visual Studio 中设置了一个运行 nuget pack mycompany.nuspec 的 post-build 事件,mycompany.nuspec 看起来像这样(我试图模仿生成的):

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>My.Company.Other.Package</id>
    <version>10.1.214</version>
    <authors>My Company</authors>
    <description>
    The real description.
    </description>
    <copyright>© My company</copyright>
    <tags>My company</tags>
    <dependencies>
      <group targetFramework=".NETCoreApp3.1">
        <dependency id="Microsoft.Win32.Registry" version="4.7.0" exclude="Build,Analyzers" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="C:\dev\MyProduct\bin\Debug\netcoreapp3.1\My.Company.dll" target="lib\netcoreapp3.1\My.Company.dll" />
  </files>
</package>

包构建成功。但是,当我 select 在外部项目中安装它时,NuGet 包管理器通知我它只会安装这个特定的包:

Installing:

My.Company.Package.10.1.2

安装后,我无法访问预期的 类 或命名空间,它似乎没有包含所需的一切。

第一个选项怎么会安装那么多在nuspec文件中从来没有列为依赖项的包,我该如何模仿?

我不知道它到底做了什么,但是在清理并重建我打包的解决方案并重新启动 Visual Studio 之后,它起作用了。