基于环境变量的条件引用和项目编译

时间:2019-01-02 22:43:50

标签: c# msbuild .net-standard

我正在研究一种可以被两种类型的用户访问的库-公司员工,然后是其他所有人。公司员工可以从内部Nuget提要中访问多个不公开的Nuget程序包,为方便起见,我在帖子中将它们称为“专有”程序包。

我们在一个解决方案中有多个项目-例如项目A,项目B和项目C。项目A和项目B引用项目C,而项目C使用“专有”包。

我们想做的是提供一个具有两种不同构建选项的解决方案-一种用于公司员工,另一种用于公众。当公司员工构建解决方案时,它将引用并编译Project C,并提取“专有软件包”。当它由其他人构建时,Project A和Project B将不会引用Project C,并且Project C将不会被编译,也不会尝试提取“专有”包。

是否有关于如何最好地完成此操作的建议,或任何详细的博客显示了如何完成此操作?

我目前正在尝试设置两个不同的构建配置。在其中之一中,我尝试在build.props中定义这样的常量:

<PropertyGroup>
  <!-- If build config is InternalEmployees -->   
  <DefineConstants>$(DefineConstants);InternalEmployees</DefineConstants>
</PropertyGroup>

然后在Project C中,我将以下内容添加到

<ItemGroup>
  <PackageReference Condition=" $(DefineConstants).contains(InternalEmployees)' Include="ProprietaryPackage" Version="1.1.1" />
</ItemGroup>

然后在项目A和B中,我都尝试使用#if处理器指令

#if InternalEmployees
PropreitaryPackage.SomeMethod();
#endif

但是这目前不起作用-当我尝试构建时,由于告诉我找不到专有软件包而失败。

0 个答案:

没有答案