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 之后,它起作用了。
我有一个 .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 之后,它起作用了。