visual-studio - 具有调试和发布功能的 Nuget 包

标签 visual-studio nuget nuget-package nuget-server sourcelink

在我们的工作中,我们有一个团队开发库,另一个团队使用这些库开发项目。

图书馆团队比项目团队有更多的经验。

我们在这里创建了这个环境:

所有库都在 nuget 包中,在 nuget 服务器中,在 azure devops 中。 我们在 Azure devops 中有源链接。

但是当我们部署库时,我们必须在调试或发布之间做出选择,并且我们各有利弊。

我理想的 nuget 包应该同时具有调试和发布功能,并且会选择与运行它的项目相同的选项。

这样我就可以为项目团队更好地调试,并在发布时获得最佳性能。

我与 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 包没有机制让项目根据主项目的配置 引用调试输出文件或发布输出文件。

而且当你打包工程时,它没有同时包含DebugRelease输出文件然后让主工程-- -----使用Debug时,引用nuget的Debug内容,使用Release时,引用nuget的Release内容。

到目前为止,nuget还没有那么灵活,它不能完成你上面提到的功能。

=====================

建议,您应该创建项目的两个nuget包(DebugRelease),然后手动安装相应的包作为需要。

您可以创建一个 net 标准库项目,并将这些添加到 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>

并且您可以将配置切换为调试发布来构建您的项目以在输出文件夹下生成nupkg文件。

注意:

1) 要生成调试 nuget 包,您应该将 pdb 文件源文件 包含到 nuget 包中,然后您可以在主项目中调试它。有 a similar issue其中包含有关它的详细步骤。

2) 您可以在新的sdk格式项目中直接定义package_id。您应该添加 DebugRelease 来区分它们。

更多信息打包新的sdk格式工程,可以引用this document .

==============================

此外,如果您仍然想要初始功能(在同一个包中包含调试或发布),您可以在我们的User Voice Forum建议一个功能希望团队认真考虑您的想法并给予满意的答复。

关于visual-studio - 具有调试和发布功能的 Nuget 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62996492/

相关文章:

angular - tsconfig.json 中的 Visual Studio 2017 Typescript baseUrl/paths 无法识别

c# - 了解涉及 paint() 的小 C# 代码片段

nuget - 有没有办法从 nuget.org 下载包然后离线安装到 Visual Studio 中?

powershell - 使用 NuGet/Powershell 从项目中删除文件夹和文件

.net - 要求用户像 VS 调试器一样使用管理权限重新启动应用程序

c++ - 预构建中自动生成的 C++ 文件未包含在编译中

c# - 您的启动项目未引用 Microsoft.EntityFrameworkCore.Design

visual-studio - Nuget 包管理器长文件名错误

c# - 清除没有子元素的 xdt 元素

c# - 创建 Xamarin 插件/用户控件库