在我们的工作中,我们有一个团队开发库,其他团队使用这些库开发项目。
图书馆团队比项目团队拥有更多经验。
我们在这里创建了这个环境:
所有库都位于 nuget 包、nuget 服务器、azure devops 中。 我们在 Azure DevOps 中有源链接。
但是当我们部署库时,我们必须在调试或发布之间进行选择,并且每种方法都有优点和缺点。
我理想的 nuget 包将同时具有调试和发布功能,并且会选择与运行它的项目相同的选项。
这样我就能为项目团队提供更好的调试,并在发布时获得最佳性能。
我与 https://twitter.com/rrelyea 进行了交谈,他给出了一些想法,但这些想法对于其他团队来说实施起来似乎很复杂,或者管理起来很复杂。
比如 2 个 nuget 服务器,一台用于调试,一台用于发布,并在计算机和构建服务器上配置这些不同的服务器。
或者 2 个 nuget 包,包名称上带有 .debug 和 .release,并配置项目以在每种模式下加载不同的包。
真正的问题是我需要保证所有包在两台服务器上都具有相同的 id 和版本。
有没有更自动化的打包方式?
简单,如果是调试则使用调试,如果是发布则使用发布。
顺便问一下,这种情况下debug和release的性能差异有多大?
有没有更自动化的打包方式?
实际上,nuget包没有一种机制可以让项目根据主项目的配置来引用调试输出文件或发布输出文件。
并且当你打包一个项目时,它没有同时包含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 file
和source files
包含到nuget包中,然后您可以在主项目中对其进行调试。有一个类似的问题,其中包含有关它的详细步骤。
2) 可以直接在新的sdk格式工程中定义package_id
。并且您应该添加
Debug
或 Release
来区分它们。更多关于打包新的sdk格式项目的信息另外,如果您还想要初始功能(在同一个包中包含Debug或Release),您可以在我们的用户声音论坛上
suggest a feature
,希望团队会仔细考虑您的想法并给出满意的答复回复。