具有调试和发布功能的Nuget软件包

时间:2020-07-20 13:30:08

标签: 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,如果是发行版,则使用发布。

在这种情况下,调试和发布之间有多少性能差异?

2 个答案:

答案 0 :(得分:1)

没有更自动的包装方式吗?

实际上,nuget软件包没有一种机制可以让项目根据主项目的配置来引用调试输出文件或释放输出文件。< / p>

打包项目时,它没有功能同时包含 Debug Release 输出文件,然后让主项目-----使用 Debug 时,请参考nuget的Debug内容;使用 Release 时,请参考nuget的 Release 内容。

到目前为止,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>

然后,您可以将配置切换为 Debug Release 来构建项目,以在输出文件夹下生成nupkg文件。

注意

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

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

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

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

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

答案 1 :(得分:0)

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