当前位置:  开发笔记 > 前端 > 正文

如何打包.NET Framework库?

如何解决《如何打包.NETFramework库?》经验,为你挑选了1个好方法。

如何以现代通用方式打包.NET库以便通过NuGet进行发布?假设我有一个AnyCPU程序集,我希望在.NET Framework 4.6平台上提供.

这是一系列问题和答案,记录了我对现代NuGet包创作主题的研究结果,特别关注NuGet 3引入的变化.您可能还对一些相关问题感兴趣:

如何打包面向通用Windows平台的.NET库?

如何打包面向.NET Core的可移植.NET库?

如何打包面向.NET Framework和通用Windows平台的.NET库并包含特定于平台的功能?

如何打包一个针对通用Windows平台的多架构.NET库?

如何打包一个针对通用Windows平台并依赖于Visual Studio扩展SDK的.NET库?

Sander.. 15

您将需要创建和发布具有以下内容的NuGet包:

包含代码(.dll)的程序集.

调试符号文件(.pdb).

XML文档文件(.xml),假设您已在项目设置中启用它.

虽然发布代码的原因很明显,但另外两个值得扩展:

调试符号文件使运行时能够使用代码的行号填充堆栈跟踪,还可以向附加的调试器提供其他信息.在NuGet包中包含此文件是一种非常简单的方法,可以增强与库相关的故障排除体验.

该XML文档文件是使用Visual Studio中显示提供有关方法及其参数库的用户文档工具提示.这样可以避免引用外部文档,从而提高库的可用性.

从本质上讲,NuGet包是一个包含您的内容和一些元数据的zip文件.要发布此.NET库,您需要创建具有以下结构的包(省略元数据):

\---lib
    \---net46
            MyLibrary.dll
            MyLibrary.pdb
            MyLibrary.XML

简而言之,当程序包安装到.NET Framework 4.6项目中时,将使用lib \net46中的所有内容,这正是您所需要的.所有这三个文件都来自Release构建配置下项目的构建输出目录.

创建这样的NuGet包的最简单方法是使用NuGet命令行可执行文件.在解决方案中创建一个目录(例如MyLibrary\NuGet)并将nuget.exe复制到此目录中.要定义库的NuGet包的结构,请使用以下作为模板在同一目录(例如MyLibrary.nuspec)中创建.nuspec文件:



    
        Example.MyLibrary
        1.0.0
        Firstname Lastname
        Example of a simple .NET Framework 4.6 library.
        
            
        
    
    
        
    

确保将nuget.exe和.nuspec文件的构建操作设置为None,以避免它们被构建过程不必要地触及.

如果您的项目是根据标准Visual Studio项目模板配置的,则项目的所有三个相关输出(MyLibrary.dll,MyLibrary.xml和MyLibrary.pdb)将出现在bin\Release目录和示例中的通配符模式中将所有这些复制到NuGet包中的适当位置.

依赖项列表应该镜像项目目录中的packages.config文件.如果您的库与其他NuGet包没有依赖关系,您可以简单地省略该元素.

在继续之前,使用Release配置构建解决方案.

您可以使用该命令创建包nuget.exe pack MyLibrary.nuspec.这将生成一个以.nuspec文件中指定的ID命名的包,例如Example.MyLibrary.1.0.0.nupkg.您可以将此文件上传到您选择的NuGet软件包存储库,并像使用任何其他NuGet软件包一样直接使用它.

我发现使用PowerShell脚本启动NuGet包生成是有益的,特别是如果您需要执行内容的预处理,就像更复杂的项目一样.以下是PowerShell脚本的示例,该脚本将在同一目录中使用nuget.exe为同一目录中的所有.nuspec文件创建包:

# Delete any existing output.
Remove-Item *.nupkg

# Create new packages for any nuspec files that exist in this directory.
Foreach ($nuspec in $(Get-Item *.nuspec))
{
    .\NuGet.exe pack "$nuspec"
}

如果将其包含在项目中,请确保将PowerShell脚本的构建操作设置为"无",以避免构建过程不必要地触及它.

GitHub上提供了一个示例库和相关的打包文件.与此答案对应的解决方案是SimpleNetFrameworkLibrary.



1> Sander..:

您将需要创建和发布具有以下内容的NuGet包:

包含代码(.dll)的程序集.

调试符号文件(.pdb).

XML文档文件(.xml),假设您已在项目设置中启用它.

虽然发布代码的原因很明显,但另外两个值得扩展:

调试符号文件使运行时能够使用代码的行号填充堆栈跟踪,还可以向附加的调试器提供其他信息.在NuGet包中包含此文件是一种非常简单的方法,可以增强与库相关的故障排除体验.

该XML文档文件是使用Visual Studio中显示提供有关方法及其参数库的用户文档工具提示.这样可以避免引用外部文档,从而提高库的可用性.

从本质上讲,NuGet包是一个包含您的内容和一些元数据的zip文件.要发布此.NET库,您需要创建具有以下结构的包(省略元数据):

\---lib
    \---net46
            MyLibrary.dll
            MyLibrary.pdb
            MyLibrary.XML

简而言之,当程序包安装到.NET Framework 4.6项目中时,将使用lib \net46中的所有内容,这正是您所需要的.所有这三个文件都来自Release构建配置下项目的构建输出目录.

创建这样的NuGet包的最简单方法是使用NuGet命令行可执行文件.在解决方案中创建一个目录(例如MyLibrary\NuGet)并将nuget.exe复制到此目录中.要定义库的NuGet包的结构,请使用以下作为模板在同一目录(例如MyLibrary.nuspec)中创建.nuspec文件:



    
        Example.MyLibrary
        1.0.0
        Firstname Lastname
        Example of a simple .NET Framework 4.6 library.
        
            
        
    
    
        
    

确保将nuget.exe和.nuspec文件的构建操作设置为None,以避免它们被构建过程不必要地触及.

如果您的项目是根据标准Visual Studio项目模板配置的,则项目的所有三个相关输出(MyLibrary.dll,MyLibrary.xml和MyLibrary.pdb)将出现在bin\Release目录和示例中的通配符模式中将所有这些复制到NuGet包中的适当位置.

依赖项列表应该镜像项目目录中的packages.config文件.如果您的库与其他NuGet包没有依赖关系,您可以简单地省略该元素.

在继续之前,使用Release配置构建解决方案.

您可以使用该命令创建包nuget.exe pack MyLibrary.nuspec.这将生成一个以.nuspec文件中指定的ID命名的包,例如Example.MyLibrary.1.0.0.nupkg.您可以将此文件上传到您选择的NuGet软件包存储库,并像使用任何其他NuGet软件包一样直接使用它.

我发现使用PowerShell脚本启动NuGet包生成是有益的,特别是如果您需要执行内容的预处理,就像更复杂的项目一样.以下是PowerShell脚本的示例,该脚本将在同一目录中使用nuget.exe为同一目录中的所有.nuspec文件创建包:

# Delete any existing output.
Remove-Item *.nupkg

# Create new packages for any nuspec files that exist in this directory.
Foreach ($nuspec in $(Get-Item *.nuspec))
{
    .\NuGet.exe pack "$nuspec"
}

如果将其包含在项目中,请确保将PowerShell脚本的构建操作设置为"无",以避免构建过程不必要地触及它.

GitHub上提供了一个示例库和相关的打包文件.与此答案对应的解决方案是SimpleNetFrameworkLibrary.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有