在 NuGet 包中定义 C# 预处理器符号

Define C# preprocessor symbol in NuGet package

NuGet 包可以为消费项目定义预处理器符号吗?如果是,怎么做?

如果您的包 (My.ExamplePackage) 在构建目录中包含一个名为包名 + .targets 的 MSBuild 文件(因此 build\MyExamplePackage.targets),您可以使用它来修改DefineConstants 属性 可能已设置为默认值或在项目中重置:

<Project>
  <PropertyGroup>
    <DefineConstants>$(DefineConstants);MY_PREPOCESSOR_SYMBOL</DefineConstants>
  </PropertyGroup>
</Project>

虽然包可以同时包含 .props.targets 文件,但 .targets 文件将在构建 csproj 文件的主体之后导入,因此如果它是项目re-sets DefineConstants(意思是不通过添加 $(DefineConstant); 来添加),.targtes 文件有机会添加到这个 属性.