【问题标题】:Nuget packages with both debug and release带有调试和发布的 Nuget 包
【发布时间】:2020-11-09 18:28:37
【问题描述】:

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

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

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

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

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

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

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

我与https://twitter.com/rrelyea 进行了交谈,他提出了一些想法,但对于其他团队来说实施或管理起来似乎很复杂。

像 2 台 nuget 服务器,一台用于调试,一台用于发布,并在机器和构建服务器上配置这些不同的服务器。

或 2 个 nuget 包,包的名称带有 .debug 和 .release,并将项目配置为在每种模式下加载不同的包。

真正的问题是我需要保证所有包在两台服务器上都具有相同的 id 和版本。

难道没有更自动化的打包方式吗?

简单,如果是debug就用debug,如果是release就用release。

顺便问一下,在这种情况下,debug 和 release 之间的性能差异有多大?

【问题讨论】:

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


    【解决方案1】:

    也许...只需使用 Nuget Explorer 将调试文件夹中的 .pdb 文件添加到 Lib

    【讨论】:

    【解决方案2】:

    难道没有更自动化的打包方式吗?

    其实,nuget包并没有机制让项目根据主项目的配置来引用调试输出文件或发布输出文件。

    而且当你打包一个工程的时候,它没有一个功能是同时包含Debug或者Release输出文件然后让主工程-- -----使用Debug时,引用nuget的Debug内容,使用Release时,引用nuget的Release内容。

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

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

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

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

    并且您可以将配置切换到DebugRelease来构建您的项目以在输出文件夹下生成nupkg文件。

    注意

    1) 要生成调试nuget 包,您应该将pdb filesource files 包含到nuget 包中,然后您可以在主项目中对其进行调试。有a similar issue,里面有详细的步骤。

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

    更多关于打包新sdk格式项目的信息,可以参考this document

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

    另外,如果您仍然想要初始功能(在同一个包中包含调试或发布),您可以在我们的User Voice Forumsuggest a feature,我希望团队会考虑您的想法仔细并给予满意的答复。

    【讨论】:

    • 我这样做了,添加了这个建议developercommunity.visualstudio.com/idea/1120708/…
    • 您好,感谢您与我们分享门票,任何对此感兴趣的人都会为您投票。由于我们只能得到这些,我建议你可以接受我的回答。或者你可以打包两个不同的包。
    猜你喜欢
    • 2016-07-03
    • 2016-10-07
    • 2016-10-15
    • 2012-09-26
    • 2020-12-03
    • 2019-10-02
    • 1970-01-01
    • 2014-12-21
    • 2021-09-19
    相关资源
    最近更新 更多