具有调试和发布功能的 Nuget 包
Nuget packages with both debug and release
在我们的工作中,我们有一个团队开发库,其他团队使用这些库开发项目。
图书馆团队比项目团队更有经验。
我们在这里创建了这个环境:
所有库都在 nuget 包中,在 nuget 服务器中,在 azure devops 中。
我们在 Azure devops 中有源 link。
但是当我们部署库时,我们必须在调试或发布之间做出选择,我们各有利弊。
我理想的 nuget 包应该有 debug 和 release,并且 select 和项目 运行 一样。
这样我可以为项目团队更好地调试,并在发布时获得最佳性能。
我和 https://twitter.com/rrelyea 谈过,他提出了一些想法,但这些想法对于其他团队来说实施起来似乎很复杂,或者管理起来很复杂。
比如 2 台 nuget 服务器,一台用于调试,一台用于发布,并在机器和构建服务器上配置这些不同的服务器。
或者 2 个 nuget 包,在包的名称上带有 .debug 和 .release,并配置项目以在每种模式下加载不同的包。
真正的问题是我需要保证两台服务器上的所有包都具有相同的 ID 和版本。
没有更自动化的打包方式吗?
如果是debug就简单使用debug,如果是release就使用release。
顺便问一下,在这种情况下,调试和发布之间的性能差异有多大?
Isn't there a more automatic way to pack the packages?
实际上,nuget 包没有机制让项目根据配置[=67]引用调试输出文件或发布输出文件=] 的主要项目。
并且打包工程时没有同时包含Debug或Release输出文件的功能然后让主工程--------使用Debug时,引用nuget的Debug内容,使用Release时,引用发布 nuget 的内容。
到目前为止,nuget还没有那么灵活,它不能完成你上面提到的功能
=====================
作为建议,您应该创建两个 nuget 包(Debug 或 Release)项目,然后根据需要手动安装相应的包。
您可以创建一个网络标准库项目,并将这些添加到 xxx.csproj
文件中:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>PackageName</RootNamespace>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<PackageId>PackageName_Debug</PackageId> //name the nuget package which contains Debug key name
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<PackageId>PackageName_Release</PackageId> //name the nuget package which contains Debug key name
</PropertyGroup>
<PropertyGroup>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>
</PropertyGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
<None Include="$(ProjectDir)$(OutputPath)$(AssemblyName).pdb" Pack="true" PackagePath="lib$(TargetFramework)"></None>
<Compile Update="Class1.cs" Pack="true" PackagePath="Resource">
</Compile>
...// add any source files
</ItemGroup>
</Project>
And 您可以将配置切换为 Debug 或 Release 来构建您的项目在输出文件夹下生成 nupkg 文件。
注:
1) 要生成调试 nuget 包,您应该将 pdb file
和 source files
包含到 nuget 包中,然后您可以在其中进行调试主要项目。 里面有详细的步骤。
2)可以直接在新建的sdk格式工程中定义package_id
。你应该添加 Debug
或 Release
来区分它们。
更多信息关于打包新的sdk格式项目,您可以参考this document。
================================
此外,如果您仍然想要初始功能(在同一个包中包含 Debug 或 Release),您可以 suggest a feature
我们的 User Voice Forum也希望团队认真考虑您的想法并给予满意的答复。
也许...只需使用 Nuget 资源管理器将调试文件夹中的 .pdb 文件添加到 Lib
在我们的工作中,我们有一个团队开发库,其他团队使用这些库开发项目。
图书馆团队比项目团队更有经验。
我们在这里创建了这个环境:
所有库都在 nuget 包中,在 nuget 服务器中,在 azure devops 中。 我们在 Azure devops 中有源 link。
但是当我们部署库时,我们必须在调试或发布之间做出选择,我们各有利弊。
我理想的 nuget 包应该有 debug 和 release,并且 select 和项目 运行 一样。
这样我可以为项目团队更好地调试,并在发布时获得最佳性能。
我和 https://twitter.com/rrelyea 谈过,他提出了一些想法,但这些想法对于其他团队来说实施起来似乎很复杂,或者管理起来很复杂。
比如 2 台 nuget 服务器,一台用于调试,一台用于发布,并在机器和构建服务器上配置这些不同的服务器。
或者 2 个 nuget 包,在包的名称上带有 .debug 和 .release,并配置项目以在每种模式下加载不同的包。
真正的问题是我需要保证两台服务器上的所有包都具有相同的 ID 和版本。
没有更自动化的打包方式吗?
如果是debug就简单使用debug,如果是release就使用release。
顺便问一下,在这种情况下,调试和发布之间的性能差异有多大?
Isn't there a more automatic way to pack the packages?
实际上,nuget 包没有机制让项目根据配置[=67]引用调试输出文件或发布输出文件=] 的主要项目。
并且打包工程时没有同时包含Debug或Release输出文件的功能然后让主工程--------使用Debug时,引用nuget的Debug内容,使用Release时,引用发布 nuget 的内容。
到目前为止,nuget还没有那么灵活,它不能完成你上面提到的功能
=====================
作为建议,您应该创建两个 nuget 包(Debug 或 Release)项目,然后根据需要手动安装相应的包。
您可以创建一个网络标准库项目,并将这些添加到 xxx.csproj
文件中:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>PackageName</RootNamespace>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<PackageId>PackageName_Debug</PackageId> //name the nuget package which contains Debug key name
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<PackageId>PackageName_Release</PackageId> //name the nuget package which contains Debug key name
</PropertyGroup>
<PropertyGroup>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>
</PropertyGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
<None Include="$(ProjectDir)$(OutputPath)$(AssemblyName).pdb" Pack="true" PackagePath="lib$(TargetFramework)"></None>
<Compile Update="Class1.cs" Pack="true" PackagePath="Resource">
</Compile>
...// add any source files
</ItemGroup>
</Project>
And 您可以将配置切换为 Debug 或 Release 来构建您的项目在输出文件夹下生成 nupkg 文件。
注:
1) 要生成调试 nuget 包,您应该将 pdb file
和 source files
包含到 nuget 包中,然后您可以在其中进行调试主要项目。
2)可以直接在新建的sdk格式工程中定义package_id
。你应该添加 Debug
或 Release
来区分它们。
更多信息关于打包新的sdk格式项目,您可以参考this document。
================================
此外,如果您仍然想要初始功能(在同一个包中包含 Debug 或 Release),您可以 suggest a feature
我们的 User Voice Forum也希望团队认真考虑您的想法并给予满意的答复。
也许...只需使用 Nuget 资源管理器将调试文件夹中的 .pdb 文件添加到 Lib