根据配置文件更改引用的 NuGet 包

Change NuGet Package Referenced Based on Profile

我们有一个在本地创建的 NuGet 包。我们有一个包含非生产环境的版本和一个包含生产环境的版本。让我们使用Connection和ConnectionProd作为参考。

有没有一种方法可以设置调试或我已设置为使用 Connection 包的非 Prod 发布配置文件,但让生产配置文件使用 ConnectionProd?我知道 PackageReference 有条件,但我不确定是否有办法将其与选定的发布配置文件联系起来?

出于安全原因,我们的大多数开发人员都无法访问 ConnectionProd NuGet 源位置,我希望不必创建另一个 TFS 分支来单独处理生产 NuGet 引用。

您根据环境指定不同的包名称和版本:

<ItemGroup Condition="'$(Configuration)'=='Debug'">
    <PackageReference Include="Connection" Version="1.0.0-dev" />
</ItemGroup>

<ItemGroup Condition="'$(Configuration)'=='Release'">
    <PackageReference Include="ConnectionProd" Version="1.0.0" />
</ItemGroup>

更新

理论上 '$(ASPNETCORE_ENVIRONMENT)'=='Development' 或使用任何环境变量作为条件应该可以做到,但不知何故我无法让它在我的测试项目中工作。

但是,我找到了另一种方法,可以使用任何自定义变量使其成为 运行,只需在 <PropertyGroup> 中定义您的变量,然后使用它来定义条件:

<PropertyGroup>
    <MyVariable Condition="'$(MyVariable)'==''">MyValue</MyVariable>
</PropertyGroup>

<ItemGroup Condition="'$(MyVariable)'=='MyValue'">
    ...
</ItemGroup>

参考:https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-build-the-same-source-files-with-different-options?view=vs-2019#example